代码之家  ›  专栏  ›  技术社区  ›  Rohan Singh

如何强制两台负载平衡机器上自动生成的WSDL匹配?

  •  4
  • Rohan Singh  · 技术社区  · 15 年前

    我们有一个部署到两个服务器的WCF服务。位完全相同。

    在自动生成的WSDL中 https://mywebsite.com/SomeService/Soap.svc?wsdl , the <wsdl:types> 节点列出了一组XSD,格式如下:

    <xsd:import schemaLocation="https://mywebsite.com/SomeService/Soap.svc?xsd=xsd0" namespace="http://services.mywebsite.com/account" /> 
    ...
    <xsd:import schemaLocation="https://mywebsite.com/SomeService/Soap.svc?xsd=xsd6" namespace="http://schemas.datacontract.org/2004/07/SomeOtherNamespace" />
    

    这一切都很好,但问题是XSD在每个负载平衡服务器上的顺序不同,即使它们具有相同的位。这意味着XSD在 https://mywebsite.com/SomeService/Soap.svc?xsd=xsd0 在每台服务器上都是非常不同的,这显然会给那些使用服务的人带来问题。

    我知道有一些代码解决方案可以扁平化WSDL,并将所有XSD都包含在其中。但是,是否有任何简单的解决方案来强制WSDL匹配?毕竟,每台机器上的位是相同的。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Thomas    15 年前

    生成的XSD是不同的,但消息是相同的。不同的是XSD中的名称空间前缀和顺序。如果您只需要一个版本的WSDL,我建议您在上禁用负载平衡?WSDL和?XSD URL。

    尽管如此,WebService的自底向上(代码到WSDL)方法绝对不是生产环境的最佳方法。WSDL是您和客户机之间的契约,因此不应该动态地创建它,并且必须为Web服务应用程序的当前版本进行修复。