閱讀919 返回首頁    go 技術社區[雲棲]


WebService中更新函數傳入值,再調用其中函數時,函數的參數還是未改變

背景:
今天寫了一個webservice,又修改了一下函數的返回類型、out參數的數量(改為:public void SendData(DataSet ds, out string result,out string errMsg)),之後更新引用,再調用的使用時候發現SendData顯示為public string SendData(DataSet ds, out string errMsg)形式,不管是添加webservice還是reference service都不行,解決方案也清理過,iis也重啟過,都沒解決問題。
結果:
最後把函數改成public bool SendData(DataSet ds, out string result,out string errMsg)就可以了,再調用的時候,就會正確提示。可見void與多個out有一定的“矛盾”啊
==》微軟在web引用的時候做了一個轉換,把void類型函數的out參數自動轉換為非void函數,並把這個參數變成了函數的返回值。
比如:

  1. [WebMethod]  
  2.     public void getPwdNick(int userid,out string pwd,out string nick)  
  3.     {  
  4.     }  
他會在web引用後生成如下代碼:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("https://tempuri.org/getPwdNick", RequestNamespace="https://tempuri.org/", ResponseNamespace="https://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]        

 [return: System.Xml.Serialization.XmlElementAttribute("pwd")]         

public string getPwdNick(int userid,out string nick) 

{             

object[] results = this.Invoke("getPwdNick"new object[] {userid});             

nick = ((string)(results[1]));             

return ((string)(results[0]));                   

 } 

這段代碼在vs中點擊顯示所有文件,然後再web refences下麵localhost-Reference.map-Reference.cs中。
例子來源



最後更新:2017-04-03 12:54:16

  上一篇:go 控件repositoryItemTextEdit輸入不上
  下一篇:go For 死循環的寫法