【问题标题】:Problem with WCF client calling one-way operationWCF 客户端调用单向操作的问题
【发布时间】: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 代理客户端似乎不正确。

感谢您的任何建议。

【问题讨论】:

标签: wcf soap sap-pi sap-xi


【解决方案1】:

看起来 SAP PI 错误地发送了一个空的 SOAP 信封,而 .NET 错误地解释了该信封。

来自this thread的一些选项:

  • 更改生成的代理并将 OneWay=true 删除(或添加 OneWay=false)到方法定义中
  • 在异常处理程序中捕获协议冲突并忽略它
  • 使用 2.0 样式的 webreference 调用服务
  • 应用 SAP 补丁 Note 1459995 - Soap Sender Adapter HTTP 202 并将 &responsecode202=true 添加到 url

第一个和最后一个选项都对我有用。关于这个sap.com thread的进一步讨论。

【讨论】:

  • 谢谢你,它仍然对我有用。
  • 我认为从系统的角度来看,Web 服务调用应始终以确认回复。 True 或 false,1 或 0 表示您的消息是从另一方接收和处理的。
  • 最后一个选项适用于 SAP PI 7.3.1 和 .NET 4.7.2
【解决方案2】:

我也会看看 Gerben van Loon here 的这篇文章。根据标准,一种方式操作可能并不是真正的一种方式。

【讨论】:

  • SOAP 上的单向 Web 调用的语义与 void() 相当,而不是一劳永逸。就像返回 void() 的方法一样,调用是阻塞的,并且确实具有“返回”异常的能力。
【解决方案3】:

查看此 SAP 线程以获取完整讨论: http://scn.sap.com/thread/1627368

@Brian Low 已经正确且非常彻底地回答了这个问题(应该被标记为答案)。

我还想补充一点,这是一个已知错误,其中 SOAP 适配器不符合上述 WS-I Basic Profile 1.1 (R2750) 并且 WCF 不符合 (R2750)。结果……浪费了好几个小时,咬牙切齿……

【讨论】:

    【解决方案4】:

    我相信可以通过在客户端 porxy 中的操作中添加以下属性声明来解决这个特殊问题:

    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]

    【讨论】:

    • 感谢您的回答。但是,将此添加到生成的客户端代理与将 OneWay 属性设置为 false 大致相同。不幸的是,它没有用。
    【解决方案5】:

    没有看到方法的签名是什么样子,我最好的猜测是您的方法定义为返回“void”以外的内容。由于操作是单向的,方法只能使用“void”定义(没有返回)。其他任何东西,并且操作不是单向的。

    【讨论】:

    • 方法实际返回void
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多