現在、WCFチャネルで障害をスローする方が、サービスからのステータスまたは応答を示すメッセージを渡す方が良いかどうかについて議論しています。WCF - エラー/例外とメッセージの比較
フォルトには、組み込みのエラーハンドラを使用してそれに応じて対応できるWCFの組み込みサポートが付属しています。しかし、.NETの例外をスローすると非常にコストがかかるため、オーバーヘッドが発生します。
メッセージには、例外をスローするオーバーヘッドなしにサービスコールの状況を判断するために必要な情報を含めることができます。しかし、メッセージを分析し、その内容に続くアクションを決定するには、繰り返しのコードがいくつか必要です。
私たちは私たちのサービスに利用することができる一般的なメッセージオブジェクトを作成するに刺しを取って、これは我々が思いついたものです:
public class ReturnItemDTO<T>
{
[DataMember]
public bool Success { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public T Item { get; set; }
}
すべての私のサービスコールは、この項目を返す場合、私は一貫して確認することができますすべて成功したかどうかを判断するための "成功"プロパティ私は何か問題があったことを示すイベントのエラーメッセージ文字列と、必要に応じてDtoを含む一般的な項目を持っています。
例外情報は、中央ロギングサービスにログオフされ、サービスから戻される必要はありません。
思考?コメント?アイデア?提案?
私の質問のいくつかの更なる明確化
私は障害契約に抱えている問題は、ビジネスルールを通信しています。
誰かがログインしてアカウントがロックされている場合、どのように通信するのですか?彼らのログインは明らかに失敗しますが、理由は "Account Locked"の理由で失敗します。
だから私の操作を行います。メッセージアカウントで障害を投げ、
A)はブール値を使用するには、
Bをロック)
私は同意しません。 WCFは言語に依存しない(何らかの形では少なくとも)と想定されているので、Exceptionオブジェクトをワイヤーに渡すことで、例えば、次のような問題が発生することはありません。 Javaクライアント。 FaultContractオブジェクト型は、OASIS仕様の一部であるため、相互運用性を保証できます。 – ZombieSheep
.NETは例外をフォルト契約に変換します。私の答えに追加したリンクを参照してください。 –
私はいつも例外をスローすると不必要なオーバーヘッドが発生したという印象を受けました。あなたのポストから、私は悲しそうに間違っているようです。私はこの投稿を匿名としてマークする前に、いくつか意見を出したいと思います。しかし、あなたの入力を考慮すると、間違った契約がより良いオプションであるようです。 – WebDude