來看下,C# WebService WSDL自動生成程式碼,數組參數的BUG。。。ArrayOfString

  • 2019 年 12 月 20 日
  • 筆記

ArrayOfString ArrayOfString ArrayOfString

解決C#客戶端 ArrayOfString 參數問題。(希望搜索引擎能搜到,幫你解決神奇的ArrayOfString)


ASP.NET 服務端添加 asmx WebService文件,並添加如下方法。注意只添加這個如下方法:

參數為字元串數組:

    [WebMethod]          public string HelloWorld(string[] inputs)          {              return "Hello World";          }

其他項目添加伺服器引用這個WebService (其實是wsdl.exe 程式根據 WebService 聲明的WDSL文件自動生成程式碼。) 生成如下程式碼

public string HelloWorld(ConsoleApp2.ServiceReference1.ArrayOfString inputs) 

注意:參數string[] 變為ArrayOfString 對象。。。

神奇的是,用了這麼多年的WebService 都沒發現有這問題。。

    [WebMethod]          public string HelloWorld(string[] inputs)          {              return "Hello World";          }        //添加下邊的這個方法後,重新引用,上邊的string[] 參數就不會變成ArrayOfString對象。。。      [WebMethod]          public DataTable AddTable()          {              return null;          }

對比兩個WDSL,只要添加DataTable,WDSL里的聲明結構就不一樣了。。。

            //沒有添加Datatable 的WebService會導致聲明的string[]參數變為ArrayOfString 對象              ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient();              client.HelloWorld(new ServiceReference1.ArrayOfString());                //添加Datatable聲明的WebService就是正常的              ServiceReference2.WebService2SoapClient client2 = new ServiceReference2.WebService2SoapClient();              string[] input = new string[0];              client2.HelloWorld(input);

DEMO:

https://github.com/zifeiniu/WebserviceArrayOfString.git