加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService中的方法是否允许重载

发布时间:2020-12-17 00:38:05 所属栏目:安全 来源:网络整理
导读:一:WebService中的方法是否允许重载? 例如: [WebMethod] ? public string GetName() { ?????? return "从小就犯困"; } ? [WebMethod] public string GetName(string strValue) { return strValue; ? } 会报错。 二:为什么WebService中不支持方法的重载?

一:WebService中的方法是否允许重载?

例如:
[WebMethod]
?  public string GetName()
  {
?????? return "从小就犯困";
  }
?
  [WebMethod]
  public string GetName(string strValue)
  {
    return strValue;
?  }
会报错。
二:为什么WebService中不支持方法的重载?
??? WebService中不支持方法的重载,这还得从WebService的工作机制中说起,当客户端调用一个WebService的方法时,首先要将方法名称和需要传递的参数包装成XML,也就是SOAP包,通过HTTP协议传递到服务器端,然后服务器端解析这段XML,得到被调用的方法名称和传递过来的参数,进而调用WebService相应的方法,方法执行完毕后,将返回结果再次包装为XML,也就是SOAP响应,发送到客户端,最后客户端解析这段XML,最终得到返回结果,关键在于服务器端解析XML时无法识别重载的方法,WebService只认方法的名称,而且两个方法的名称相同,服务器端不知道该调用哪个相应的方法

三:如何解决WebService中方法的重载?
??? (1)将类的WebServiceBinding属性中ConformsTo指定为WsiProfiles.None
??? (2)可以通过MessageName属性消除由于多个相同的名称造成的Web服务无法识别的问题,因为MessageName属性使得Web服务能够确定唯一别名的重载方法,默认时候是方法本身的名称,当指定MessageName属性后,SOAP将反映MessageName的值,而不是方法名称本身,所以这就解决了WebService中不支持方法的重载

???? 代码1:[WebServiceBinding(ConformsTo = WsiProfiles.None)]
?  代码2:[WebMethod(MessageName="FirstMethod")]
?  public string GetName()
?  {
?????? return "从小就犯困";
?  }
?
?  [WebMethod(MessageName="SecondMethod")]
?  public string GetName(string strValue)
?  {
?   return strValue;
?  }
四、webservice如何直接用DataSet、DataTable、DataRow作为返回类型?
需要在Web.config文件添加序列化转换器的属性,示例代码:

[csharp] view plain copy print ?
  1. <system.web.extensions>??
  2. ????<scripting>??
  3. ??????<webServices>??
  4. ????????<jsonSerialization>??
  5. ??????????<converters>??
  6. ????????????<add?name="DataSetConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter,?Microsoft.Web.Preview"/>??
  7. ????????????<add?name="DataRowConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter,?Microsoft.Web.Preview"/>??
  8. ????????????<add?name="DataTableConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter,?Microsoft.Web.Preview"/>??
  9. ??????????</converters>??
  10. ????????</jsonSerialization>??
  11. ??????</webServices>??
  12. ????</scripting>??
  13. </system.web.extensions>??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读