今天寫了一個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函數,並把這個參數變成了函數的返回值。 比如:他會在web引用後生成如下代碼:
- [WebMethod]
- public void getPwdNick(int userid,out string pwd,out string nick)
- {
- }
這段代碼在vs中點擊顯示所有文件,然後再web refences下面localhost-Reference.map-Reference.cs中。[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/getPwdNick", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://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]));
}