BizTalk通用WCF Http接收返回void的Web服务操作的位置

时间:2011-12-22 21:49:42

标签: wcf biztalk

我正在尝试创建一个通用的BizTalk接收位置(WCF-WSHttp),该位置接受任何Web服务调用返回“void”的方法。 (该位置是通用的,因为BizTalk将消息转发到实际服务实现)

我知道不支持真正的单向操作(WCF MSMQ除外),因此操作有[OperationContract(IsOneWay = false)]

我能够使用WCF客户端调用通用服务,并且BizTalk正确处理该消息。但是,BizTalk然后返回客户端无法识别的响应,并且客户端抛出以下异常:

  

System.ServiceModel.CommunicationException:反序列化时出错   操作'MyOperationName'的回复消息正文。    OperationFormatter无法反序列化Message中的任何信息,因为Message为空(IsEmpty = true)。

这是客户端可识别的响应示例(通过直接调用服务实现进行测试,不使用BizTalk作为中介):

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
   <s:Header>
     <a:Action s:mustUnderstand="1"/>
     <a:RelatesTo>urn:uuid:102509d6-15c6-4959-9a98-b714d5d16a1f</a:RelatesTo>
   </s:Header>
   <s:Body>
     <MyOperationResponse xmlns="http://mynamespace"/>
   </s:Body>
 </s:Envelope>

但是,这是BizTalk返回的响应示例:

 <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
        <a:RelatesTo>urn:uuid:9e794c0c-65f0-4807-b1f2-84a30587df9b</a:RelatesTo>
    </s:Header>
    <s:Body/>
 </s:Envelope>

(我正在使用单向接收位置,因此我没有必要编写任何代码才能返回此内容)

这与客户期望的XML有两点不同:

  • 否&lt; a:行动&gt;
  • 清空&lt; s:Body&gt;

我认为有两种解决方法:

  1. 修改操作合同(C#接口)以期望空响应/不响应而不是当前期望的操作。
  2. 配置BizTalk以返回XML和客户期望的
  3. 关于如何获得解决方案1或解决方案2的任何想法?

    对于解决方案1,我尝试使用[OperationContract(ReplyAction = ...)]属性进行播放,但找不到使其工作的方法。

0 个答案:

没有答案