【问题标题】:Is it possible to change a parameter name of an asmx web service without breaking clients是否可以在不破坏客户端的情况下更改 asmx Web 服务的参数名称
【发布时间】:2013-04-18 03:41:30
【问题描述】:

是否可以在不破坏客户端的情况下更改 asmx Web 服务的参数名称?例如,考虑一个具有如下 Web 方法的遗留服务:

 [WebMethod]
 public string HelloWorld(string NAME)
 {
      return "Hello World and " + NAME;
 }

旧版服务 Web 方法具有参数 NAME,但我想将其更改为“名称”以遵循编码指南。这会破坏现有客户吗?

【问题讨论】:

    标签: asp.net web-services wsdl asmx


    【解决方案1】:

    最简单的可能是添加一个新方法

     //New clients use this Maybe you put it in a new asmx file.
     [WebMethod]
     public string Hello_World(string FullName)
     {
          return HelloWorld(FullName);
     }
    
    //Old clients use this.
    [WebMethod]
     public string HelloWorld(string NAME)
     {
          return "Hello World and " + NAME;
     }
    

    WCF 有方法使方法名称和参数成为一回事,而 xml 使用注释是另一回事。我认为有一种方法可以创建可以与旧版 ASMX 客户端对话的 WCF 服务,我还没有尝试过。在这种情况下,您可以重命名所有方法和参数,并通过属性注释,跨线路维护 xml 的旧名称。

    【讨论】:

    • 我是否正确地说这仍然会破坏客户端,因为客户端现在必须调用新方法名称?
    • 否,因为您没有删除旧方法名称。在 WCF 场景中,您确实更改了方法名称,然后告诉 WCF 保持 SOAP 消息相同。 WCF 确实提高了复杂性。另一方面,WCF 是一种受支持的技术,而 asmx 已被弃用。
    • 好的,谢谢,没错。那么,当 Web 服务参数名称与客户端期望的不同时,实际会发生什么呢?在后台,与 WSDL 不匹配的 SOAP 消息是否会导致远程调用失败并返回 HTTP500 或静默失败?
    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 2020-06-24
    • 2017-05-21
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多