DataContract命名空间未在WSDL / XSD中正确显示

时间:2013-03-14 19:12:19

标签: c# wcf wsdl

我已经谷歌了解了这个废话,我就在绳子的尽头。我的服务合同定义如下:

[ServiceContract(Namespace="http://myfirstnamespace.mycompany.com")]
public interface IMyServices
{
    [OperationContract]
    [XmlSerializerFormat]
    myServiceResponse MyOperation(myServiceRequest myServiceRequest);
}

对于我的请求定义,我有这个:

[DataContract(Namespace="http://mysecondnamespace.mycompany.com")]
public partial class myServiceRequest
{
    private string field1Field;
    private string field2Field;

    [DataMember]
    public string field1 {
        get {
            return this.field1Field;
        }
        set {
            this.field1Field = value;
        }
    }

    [DataMember]
    public string field2 {
        get {
            return this.field2Field;
        }
        set {
            this.field2Field = value;
        }
    }
}

请注意命名空间的区别。不幸的是,实际代码在另一台计算机上处​​于锁定状态,因此我只能尽力证明问题。似乎忽略了DataContract上的命名空间。我的WCF测试客户端将生成如下样本请求:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.openuri.org/</Action>
  </s:Header>
  <s:Body>
    <MyOperation xmlns="http://myfirstnamespace.mycompany.com/">
      <myServiceRequest xmlns:d4p1="http://mysecondnamespace.mycompany.com">
        <d4p1:field1 />
        <d4p1:field2 />
      </myServiceRequest>
    </MyOperation>
  </s:Body>
</s:Envelope>

请注意,当我在DataContract属性中指定http://myfirstnamespace.mycompany.com时,myServiceRequest位于http://mysecondnamespace.mycompany.com下。为什么?如何让这个参数显示在我想要的命名空间中?

我还要注意,我必须将此服务开发为现有的客户端规范。它是即将过时的服务的替代品,因此我无法更改客户端以接受任何不同的服务。

0 个答案:

没有答案