换句话说:如何更改 wcf 服务合同以从肥皂消息中删除额外的“消息”包装(采用 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>
行。我从零开始创建“wsdl”,首先删除了消息包装器,然后生成了示例合同(cs)。我可以看到生成的代码在生成的消息类附近使用 MessageContract.IsWrapperd=false,但我无法更改生成的代码,所以 . 我应该以某种方式更改操作合同,并要求 wcf 使用正确的 MessageContract 为我生成消息。