微软只是在web引用的时候做了一个转换,把void类型函数的out参数自动转换为非void函数,并把这个参数变成了函数的返回值。


  1. [WebMethod]  
  2.   
  3.     public void getPwdNick(int userid,out string pwd,out string nick)  
  4.   
  5.     {  
  6.   
  7.     }  


他会在web引用后生成如下代码:

[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]));                    } 这段代码在vs中点击显示所有文件,然后再web refences下面localhost-Reference.map-Reference.cs中。