919
技術社區[雲棲]
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函數,並把這個參數變成了函數的返回值。
比如:
- [WebMethod]
- public void getPwdNick(int userid,out string pwd,out string nick)
- {
- }
[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