由于信封无效,我无法拦截回复消息。不幸的是,WCF抛出异常“无法识别的消息版本”。在调用AfterReceiveReply之前,我没有机会更正响应XML。我可以使用较低级别(或不同)的调用来拦截流并更正此XML,还是有更好的方法来处理响应,即CustomBinding?
我已经尝试过IClientMessageInspector AfterReceiveReply和IOperationBehavior,但是在抛出异常后都会调用这些行为。
这是响应的样子。
<ENVELOPE>
<HEADER>
<ERROR_CODE>955</ERROR_CODE>
<ERROR_DESC>XML Parsing Failed: test:1:74 error: value '1231231230' does not match regular expression facet '\d{19,20}'</ERROR_DESC>
<ASYNCH_RESPONSE_INDICATOR>0</ASYNCH_RESPONSE_INDICATOR>
</HEADER>
<BODY>
<MY_METHOD_RESPONSE></MY_METHOD_RESPONSE>
</BODY>
</ENVELOPE>
答案 0 :(得分:1)
您尝试调用的服务不是SOAP服务。它看起来像旧式POX Web服务,在这种情况下,有两种方法可以使用它。
要使用WCF,请参阅here和here。您的问题是这些服务风格现在被认为是非正统的,因此WCF的更高版本可能不再支持它们。
另一方面,HttpWebRequest虽然仍然支持.net,但却很繁琐而且没有广泛使用。它有一个名为WebClient的高级包装器,它更容易使用,但它可能无法为您提供所需的控制级别。
我当然会先调查第二个选项。 WCF中对POX服务的支持是在2008年引入的,REST Toolkit是微软首次涉足SOAP服务之外的世界(尽管是.net远程),因此严重过时了。