2

次のカスタム バインディングを持つ WCF サービスがあります。

    <binding name="binaryHttpBinding" >
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="2147483647" />
    </binding>

(もちろん、クライアントにはこのバインディングに一致する構成があります)。問題は、クライアントが一般的な FaultException を受信しないことです。たとえば、"T" がクライアントで受信されない場合、呼び出しを追跡すれば確認できます。ただし、Soap 1.2 を使用して binaryMessageEncoding を textMessageEncoding に置き換えると、すべての障害例外が障害の詳細で強化されます。

ネットで検索したところ、HTTP を介したバイナリ メッセージ エンコーディングが一般的な WCF 障害例外と互換性がないことを主張する情報を見つけることができませんでした。また、バイナリ メッセージ エンコーディングの多くを制御できるようにも見えません。たとえば、SOAP メッセージ バージョンの構成を設定できません (バイナリ エンコーディングは WCF でサポートされていません)。このシナリオがサポートされているかどうかは疑問です。

4

1 に答える 1

3

何がうまくいかないのかを理解するためにかなりの時間を費やした後、私はついにそれを機能させました. 失敗の 2 つの理由、いずれも明白ではありません。

  1. フォルト メッセージ クラスは、何らかの計算を行った ToString メソッドをオーバーライドしました。確かに、そのようなロジックを ToString に入れるのは賢明ではありませんでしたが、これがバイナリのシリアル化だけに影響すると誰が推測できたでしょうか?
  2. FaultException コンストラクターには、例外が発生したメソッドの名前に設定したオプションのパラメーター「actionName」があります。どうやらWCFは、アクション名に割り当てられるものについてかなりうるさいですが、空白のままにしておくと常に機能します。繰り返しますが、これがバイナリのシリアル化にのみ影響し、そのような奇妙な方法で (したがって、クライアント側でメッセージ障害を破棄する) 影響を与えると誰が推測できますか?
于 2014-10-20T20:40:56.457 に答える