3

我已经用谷歌搜索了这个垃圾,我已经走到了尽头。我有一个这样定义的服务合同:

[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://mysecondnamespace.mycompany.com时,myServiceRequest 位于http://myfirstnamespace.mycompany.com下。为什么?如何让这个参数显示在我想要的命名空间中?

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

4

0 回答 0