在我们的INT和QA环境中,简单WCF服务的WSDL如下所示:
<wsdl:types>
<xsd:schema targetNamespace="http://blahService/Imports">
<xsd:import schemaLocation="http://server:80/blahService/blahService.svc?xsd=xsd2" namespace="http://genericHeader"/>
<xsd:import schemaLocation="http://server:80/blahService/blahService.svc?xsd=xsd3" namespace="http://blahServiceNamespace"/>
</xsd:schema>
</wsdl:types>
但是在生产中,它看起来像这样:
<wsdl:types>
<xsd:schema targetNamespace="http://blahService/Imports" />
</wsdl:types>
我已经阅读了很多关于展平WCF生成的WSDL以直接在WSDL中包含xsds的帖子,还有更多关于如何使schemaLocation指向特定URL而不是请求来自哪个URL的帖子,但我想知道的是......为什么WSDL在两个不同的环境中有所不同,以及我们如何解决它?
答案 0 :(得分:1)
WSDL由WCF即时生成。检查mex端点是否在PROD中公开。
作为一个警告,请注意扁平化WSDL以消除导入。根据DTO对象图的复杂程度,XSD可能会因交叉引用而“破坏”。在这种情况下,.NET工具可以很好地创建代理类,但我们经验丰富的Java工具和其他XML验证工具由于格式错误而失败。
答案 1 :(得分:-1)
[XmlSerializerFormat]
public partial interface IInterface
{ [OperationContract]
Response test(test[] tests);
}