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