如何解决如果响应不是 SOAP 消息,即使它应该是,如何获得原始响应?
有一个我必须与之交互的外部 SOAP 服务。
为此我打开VisualStudio,右键单击References,单击“添加服务引用”,输入WSDL 文档的地址并单击“确定”。这行得通,VisualStudio 为我生成了一个库 - 一个 WCF 客户端 - 可用于与上述外部 API 进行交互。
唯一的问题是有时我会收到System.ServiceModel.CommunicationException: Unrecognized message version.
fiddler 向我展示了原因。这是服务器的响应:
<h1>CException</h1>
<p>A non-numeric value encountered</p>
好吧,这绝对不是 SOAP 响应,难怪 .NET 拒绝解析它。但在这种情况下,我可以检索原始响应吗? (也许从 HTML 标签中检索错误并将其显示给用户是有意义的)
我的尝试:我从 Microsoft 文档中阅读了这篇文章:How to: Inspect or Modify Messages on the Client 它说:
检查或修改消息
- 实现
System.ServiceModel.Dispatcher.IClientMessageInspector
接口。 - 根据您要插入客户端消息检查器的范围实施
System.ServiceModel.Description.IEndpointBehavior
或System.ServiceModel.Description.IContractBehavior
。System.ServiceModel.Description.IEndpointBehavior
允许您在端点级别更改行为。System.ServiceModel.Description.IContractBehavior
允许您在合同级别更改行为。 - 在对
ClientBase<TChannel>.Open
调用ICommunicationObject.Open
或System.ServiceModel.ChannelFactory<TChannel>
方法之前插入行为。有关详情,请参阅Configuring and Extending the Runtime with Behaviors。
(这也是 this SO answer 建议的)
我尝试了 IContractBehavior
和 IEndpointBehavior
。不幸的是,结果是相同的:CommunicationException
在调用我的自定义行为之前 被抛出,因此我无法获得原始响应。 (如果响应是 SOAP 消息,则不会抛出异常,调用我的行为,我可以获得原始响应,但在这种情况下,我对它不感兴趣:()>
有没有办法获得原始响应,即使它不是 SOAP 消息?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。