WCF:MessageContractAttribute.isWrapped = false Generationを強制する方法は?

StackOverflow https://stackoverflow.com/questions/4280830

  •  28-09-2019
  •  | 
  •  

質問

言い換えれば、WCFサービス契約を変更して、SOAPメッセージ(WSDLを採用)から追加の「メッセージの」ラッパーを削除する方法は?

契約書が次のWCFサービスを作成しました。

   [ServiceContract(Namespace = "http://blabla/", Name = "DiagnosticApplication")]
   public interface IReceiveApplication
   {
        [OperationContract]
        string Test(XmlElement e);
   }

だから私のSCは今そのようなメッセージを受け入れます

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:epr="http://blabla/">
     <soapenv:Header/>
     <soapenv:Body>
        <epr:Test>
           <epr:e>
             <anyxml/>
           </epr:e>
        </epr:Test>
     </soapenv:Body>
</soapenv:Envelope>

しかし、レガシークライアントはそのようなメッセージを送信します(メッセージ EPR:e 逃したレベル)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:epr="http://blabla/">
    <soapenv:Header/>
    <soapenv:Body>
        <epr:Test>
          <anyxml/>
        </epr:Test>
    </soapenv:Body>
</soapenv:Envelope>

Ok。ゼロから「WSDL」を作成しました。まず、メッセージラッパーを削除してから、サンプル契約(CS)を生成しました。生成されたコードがmesageContract.iswrapperd = false near near near near near near near near near near codeを使用することがわかりますが、生成されたコードは変更できません。どういうわけか操作契約を変更し、WCFに適切なMessageContractを使用してメッセージを生成するように依頼する必要があります。

役に立ちましたか?

解決

私には考えがあります:私はどういうわけか生成するように頼むべきです

<wsdl:part name="parameters" element="tns:Test"/>

しかし

<wsdl:part name="parameters" type="xsd:any"/>

追加:

そして今、私はそれをどのように行うかを知っています:必要なメッセージ契約を生成するためのサービス/オペレーション契約にはそのようなオプションはありませんが、独自のクラスを作成するだけで、メッセージ契約属性でマークを付けます。

[ServiceContract(Namespace = "http://blabla/", Name = "DiagnosticApplication")]
public interface IReceiveApplication
{
    [OperationContract]
    string Test(XmlElement  e);
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.MessageContractAttribute(IsWrapped = false)]
public partial class MessageRequest
{

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "", Order = 0)]
    public XmlElement parameters;

    public RCMR_IN000004FI01Request(){}

    public RCMR_IN000004FI01Request(XmlElement parameters)
    {
        this.parameters = parameters;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top