从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代理客户端似乎是不对的.
谢谢你的任何建议.
看起来SAP PI错误地发送了一个空的SOAP信封,并且.NET错误地解释了该信封.
这个帖子的一些选项:
更改生成的代理并删除OneWay = true(或添加OneWay = false)到方法定义
捕获异常处理程序中的Protocol Violation并忽略它
使用2.0样式的webreference来调用服务
应用SAP补丁说明1459995 - Soap Sender Adapter HTTP 202并将urc添加到responsecode202 = true
第一个也是最后一个选项都适合我.关于这个sap.com线程的进一步讨论.