1

私は新しいものを投げてFaultException("error");いましたが、「エラー」というテキストでクライアントに戻りました。

今、私はFaultContractそれを適切に行うために a を使用したいと考えています。

したがって、属性を持つ ServiceFault という名前のものを作成しました。[DataContract]これには単にstring ErrorMessageプロパティがあります。

私のコードはこれです:

ServiceFault serviceFault = new ServiceFault("Broken.");

throw new FaultException<ServiceFault>(serviceFault);

それをテストするためのコンソール アプリを作成し、障害の例外をキャプチャするために try catch を完了しましたが、次のようになりました。

サービスの呼び出しに失敗しました。考えられる原因: サービスがオフラインであるか、アクセスできません。クライアント側の構成がプロキシと一致しません。既存のプロキシは無効です。詳細については、スタック トレースを参照してください。新しいプロキシを開始するか、デフォルト構成に復元するか、サービスを更新することで、回復を試みることができます。

フォルト例外が発生したと言うべきだと思いますが、そうではありません。

明らかな何かが欠けている可能性がありますか?おそらく構成オプションですか?この例を使用して実装しました: http://msdn.microsoft.com/en-us/library/ms752208.aspx

[FaultContract(typeof(ServiceFault))]ServiceContractに追加したことを追加する必要があります。

また、注意すべき点: 通常の FaultException をスローすると、クライアントはそれを正しく処理します。

カスタム エラー例外をスローすると、クライアントがサービスを更新して MEX データを取得するのに非常に長い時間がかかります。これは、2 回続けて更新しても疑わしいものです。

4

1 に答える 1

2

私はこれを修正し、他の人が同じ頭痛を抱くのを防ぐために質問を残しています.

ServiceFault (私のカスタム Fault クラス) が正しくシリアル化されていないことが原因でした。

元のクラスには、ゲッターとプライベート セッターで定義された astringとa の 2 つのプロパティがありました。int

その一部は非常に混乱していたので、それらを単純なフィールドに設定し、サービス参照を再構築/更新しました。問題なくすぐに動作しました。

そのため、DataContracts が正しくシリアル化されるように注意してください。

于 2013-06-03T14:48:39.207 に答える