つまり、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) を生成しました。生成されたコードが、生成されたメッセージ クラスの近くで MessageContract.IsWrapperd=false を使用していることがわかりますが、生成されたコードを変更することはできません。どうにかして操作コントラクトを変更し、正しい MessageContract でメッセージを生成するように wcf に依頼する必要があります。