我正在尝试创建一个通用的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有两点不同:
我认为有两种解决方法:
关于如何获得解决方案1或解决方案2的任何想法?
对于解决方案1,我尝试使用[OperationContract(ReplyAction = ...)]属性进行播放,但找不到使其工作的方法。