來看下,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