言い換えれば:SOAPメッセージ(wsdlを採用)から追加の "メッセージの"ラッパーを削除するwcfサービス契約を変更するには?WCF:MessageContractAttribute.IsWrapped = false世代を強制する方法?
私は契約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>
私は "wsdl"をゼロから作成しました。まず、メッセージラッパーを取り除いてサンプル契約(cs)を生成しました。私は、生成されたコードが生成されたメッセージクラスの近くでMessageContract.IsWrapperd = falseを使用していることがわかりますが、生成されたコードを変更することはできません。私はどうにかして操作契約を変更し、正しいMessageContractでメッセージを生成するようにwcfに依頼する必要があります。