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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM