在运行时绑定一个Web服务到指定的实现

日期: 2008-05-11 作者:Michèle Leroux Bustamante 来源:TechTarget中国

问:我想在.NET中在运行时给一个Web服务绑定一个指定的实现,请问您可否给我提供一个参考?请问我能不能用一个WSDL工具在编译时来产生一个代理,然后在运行时修改该代理的URL(与/或该代理的其他属性)来存取该服务的一个特定的实现?是不是有其他的技术或工具更适合用来做这个?   答:首先,我先来回答在运行时动态调用一个服务终端的问题。你可以通过设置代理类的URL属性来轻而易举地实现这个。这是所有Proxy类的基类System.Web.Services.Protocols.SoapHttpClientProtocol的一个公共的可存取的属性。它在构造函数中赋值,如下:   public MySe……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

问:我想在.NET中在运行时给一个Web服务绑定一个指定的实现,请问您可否给我提供一个参考?请问我能不能用一个WSDL工具在编译时来产生一个代理,然后在运行时修改该代理的URL(与/或该代理的其他属性)来存取该服务的一个特定的实现?是不是有其他的技术或工具更适合用来做这个?

  答:首先,我先来回答在运行时动态调用一个服务终端的问题。你可以通过设置代理类的URL属性来轻而易举地实现这个。这是所有Proxy类的基类System.Web.Services.Protocols.SoapHttpClientProtocol的一个公共的可存取的属性。它在构造函数中赋值,如下:

  public MyService() {

  this.Url = "http://localhost/MyService/service1.asmx";

  }

  而你可以在调用任何方法前重新给它赋值。

  我建议你不要修改代理类里面的任何东西——如果你可以避免的话,你不应该修改自动生成的代码。这能让你很灵活地重新生成代理,例如添加了新的方法,你可以直接重新生成代理类,而如果你修改了其中的代码,如URL,你不能不重新设置。而用BeginXXX()和EndXXX()之类的方法,你可以异步地调用代理类的任何公共方法。每个Web服务的方法都可以通过它的.NET代理来被同步或异步地调用。这有一个异步调用Web服务的例子。

  回到运行时选择服务终端的问题,你应该考虑这些终端必须对应了Web服务的WSDL绑定。这意味着你只能设置URL属性为那些准确地实现了代理的WebServiceBindingAttribute指定的每个方法的服务终端。多个对同一个WSDL绑定的服务实现可能是以下情况之一:

  1、它们是服务的精确复制,可能是为了在多个机器上的负载平衡——因此它们在不同的终端上发布,但是语义上是一样的。

  2、使用基于接口的WSDL绑定,多个服务实现了同一个WSDL定义的部分或所有方法。例如,如果一个工业标准WSDL设计成提供了服务们应该支持的命名空间和消息定义,那么为了一致性,可能很多个公司实现一个公用的服务绑定。这样,一个消息可以被发送到在不同公司上部署的服务终端。你可以根据一个公共的WSDL定义,在你的服务中实现一个消息(方法),或者根据多个公共的WSDL定义实现多个消息(方法)。

  综上所述,你可以动态地修改服务终端的URL,但关键是你要知道在什么情况下这样做是可取的,那就是:代理所希望的WSDL绑定,将被这个服务实现。

相关推荐

  • SAP收购CallidusCloud 与Salesforce竞争

    一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]

  • 联合创新,携手共赢 华为与Commvault签署全球合作联盟协议

    【中国,上海,2015年9月19日】在2015年华为云计算大会上,全球领先的信息与通信解决方案供应商华为与美国知名的数据管理软件及相关服务主要供应商Commvault签署全球合作联盟协议。基于合作协议,双方将会加大投入数据中心备份解决方案在云化环境下的“可服务化”技术研究 。Commvault公司全球业务发展副总裁Andreas May、华为IT数据中心解决方案总裁马力出席签约仪式。

  • API设计如龙生九子 各不相同

    IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。

  • .NET架构师:函数式语言做领域驱动设计

    Scott一位.NET架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,对于Scott来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。