2017-03-06 6 views
1

無効なエンベロープのために応答メッセージをインターセプトできません。残念ながら、WCFは "Unrecognized message version"例外をスローしています。 AfterReceiveReplyが呼び出される前に、応答XMLを修正する機会はありません。ストリームを傍受してこのXMLを修正するために使用できる低レベルの(または別の)呼び出しはありますか?それとも、カスタムBindingなどのレスポンスを処理するためのより良い方法がありますか?デシリアライズ前のSOAPメッセージの変更

私は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

IErrorHandlerインターフェイスを見てください。 https://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx –

+0

@WilliamXifaras - サービス側向けです。 OPの問題はクライアント側です –

答えて

1

あなたが呼び出しようとしているサービスは、SOAPサービスではありません。それは古いスタイルのように見えます。POXウェブサービス。この場合、それを消費する方法は2つあります。

  1. 使用WCFのPOXクライアント、または
  2. 使用HttpWebRequst

は、WCFを使用しherehereを参照してください。ここで問題となるのは、これらのスタイルのサービスは今や正統的ではないと考えられているため、WCFの後のバージョンではそれらをサポートしなくなる可能性があります。

一方、HttpWebRequestはまだ.netでサポートされていますが、一般的ではありません。 WebClientと呼ばれる高レベルのラッパーがありますが、これははるかに使いやすいですが、必要とするレベルの制御が得られないことがあります。

私は確かに第2のオプションを最初に調査します。 WCFのPOXサービスのサポートは、2008年にREST Toolkitで開始されました.SSOサービス(.netリモーティングにもかかわらず)の世界への最初の進出であり、真剣に日付が付けられています。

関連する問題