WCF WSDL在一个环境中有xsd:import语句,但在另一个环境中没有

时间:2011-10-18 18:55:45

标签: .net wcf wsdl

在我们的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在两个不同的环境中有所不同,以及我们如何解决它?

2 个答案:

答案 0 :(得分:1)

WSDL由WCF即时生成。检查mex端点是否在PROD中公开。

作为一个警告,请注意扁平化WSDL以消除导入。根据DTO对象图的复杂程度,XSD可能会因交叉引用而“破坏”。在这种情况下,.NET工具可以很好地创建代理类,但我们经验丰富的Java工具和其他XML验证工具由于格式错误而失败。

答案 1 :(得分:-1)

[XmlSerializerFormat]
    public partial interface IInterface
    {        [OperationContract]
        Response test(test[] tests);
    }