WCF SOAP回复ASMX SOAP回复格式

时间:2012-11-17 21:09:55

标签: wcf soap

我有一个第三方SOAP客户端,能够与旧的ASMX Web服务进行通信。

问题在于WCF服务。

我的WCF服务从此客户端接收消息没有问题,但客户端不喜欢我的WCF响应。

我的测试WCF服务发出以下响应:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
 <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <testResponse xmlns="http://www.tempuri.org">
   <testResult>randomStringData</testResult>
  </testResponse>
 </s:Body>
</s:Envelope>

但旧的SOAP客户端期望这种响应(ASMX服务):

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
  <testResponse xmlns="http://tempuri.org/">
   <testResult>randomStringData</testResult>
  </testResponse>
 </soap:Body>
</soap:Envelope>

我无法控制客户端。 有没有办法可以配置我的WCF发送与ASMX服务完全相同的消息?

我的WCF服务正在使用以下绑定:

<customBinding>
    <binding name="soap11">
      <textMessageEncoding messageVersion="Soap11" writeEncoding="utf-8"></textMessageEncoding>
      <httpTransport></httpTransport>
    </binding>
  </customBinding>

1 个答案:

答案 0 :(得分:2)

我设法用自定义消息检查器和BeforeSendReply方法解决前缀问题。

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.idispatchmessageinspector.beforesendreply.aspx

P.S另一个很好的方法是AfterReceiveRequest用于所有类型的消息调整魔法!