【发布时间】:2009-03-13 15:28:08
【问题描述】:
从我的 WCF 客户端调用 SAP PI 总线上的 Web 服务时遇到问题。 操作定义为单向,我的代理操作合约上的方法在添加服务引用时进行了相应的修饰。 但是,服务客户端在调用相应操作时会出现异常:
单向操作返回非空消息,Action=''
使用SoapUI,可以成功调用总线上的方法,并返回一个空主体的SOAP信封。公交车上的人告诉我,这是根据 SOAP 规范:
(SOAP 规范,第 4.7.9 章,单向操作):
对于在执行单向操作时如何使用 HTTP 有不同的解释。
R2714 对于单向操作,INSTANCE 不得返回包含信封的 HTTP 响应。具体来说,HTTP 响应实体主体必须为空。
R2750 消费者必须在单向操作中忽略 HTTP 响应消息中携带的信封。
R2727 对于单向操作,消费者不得将成功的 HTTP 响应状态代码(即 2xx)解释为消息有效或接收方会处理它。
看来,我的 WCF 客户端不符合 R2750。
我发现当我强制代理上的操作合约为IsOneWay = false时,一切正常。
WCF 处理单向操作的方式有什么问题,还是我做错了什么(更有可能)? 还有什么我应该做的吗,覆盖生成的 WCF 代理客户端似乎不正确。
感谢您的任何建议。
【问题讨论】:
-
好问题 +1。我认为他们的一方也不符合 R2714。请考虑向 Microsoft 提交事件并让我们知道结果。
-
类似问题(以及更多信息):stackoverflow.com/q/4510484/46039
-
链接到 SOAP 规范 4.7.9 单向操作:ws-i.org/profiles/basicprofile-1.1.html