.net – 如何在两台负载均衡的机器上强制自动生成的WSDL匹配?

我们有一个部署到两台服务器的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匹配?毕竟,每台机器上的位数相同.

最佳答案 生成的XSD是不同的,但消息是相同的.不同的是XSD中的名称空间前缀和订单.如果您只想要一个版本的WSDL,我建议您在?wsdl和?xsd URL上禁用负载平衡.

尽管如此,web服务的自下而上(代码为wsdl)方法绝对不是生产环境中最好的方法. WSDL是您和您的客户之间的合同,因此不应动态创建它,并且必须针对当前版本的Web服务应用程序进行修复.

点赞