我们有一个部署到两台服务器的WCF服务。这些位完全相同。
在https://mywebsite.com/SomeService/Soap.svc?wsdl
的自动生成的WSDL中,<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的顺序在每个负载平衡的服务器上是不同的,即使它们具有相同的位。这意味着每个服务器上https://mywebsite.com/SomeService/Soap.svc?xsd=xsd0的XSD非常不同,这显然会给使用该服务的用户带来问题。
我知道有一些代码解决方案可以展平WSDL并包含所有XSD。但是,有没有简单的解决方案来强制WSDL匹配?毕竟,它是每台机器上的相同位。
答案 0 :(得分:2)
生成的XSD是不同的,但消息是相同的。不同的是XSD中的名称空间前缀和订单。如果您只想要一个版本的WSDL,我建议您在?wsdl和?xsd URL上禁用负载平衡。
尽管如此,web服务的自下而上(代码为wsdl)方法绝对不是生产环境中最好的方法。 WSDL是您和您的客户之间的合同,因此不应动态创建它,并且必须针对当前版本的Web服务应用程序进行修复。