0

WCF 初心者アラート。「WCF の学習」と「WCF サービスのプログラミング」を読んでいます。どちらの本も FaultException<T> のスローを推奨しています。T が .NET タイプの「DivideByZeroException」であり、FaultContract が存在すると仮定する場合

[FaultContract(typeof(DivideByZeroException))]

メソッド「Divide」で、その WCF サービスとメソッドを使用する非 .NET クライアントは、その .NET 例外を理解して処理できますか? はいの場合、型情報 (DivideByZeroException) が、クライアントがアクセスして使用するメタデータの一部である (FaultContract のため) ためですか?

助けてくれてありがとう。

4

1 に答える 1

1

をスローすることはできFaultContract<DivideByZeroException>ますが、一般的には、あなたが言及した理由とまったく同じようにすべきではありません (*)。通常は、例外メッセージなどの例外からの情報とデータ コントラクトを作成し、FaultContractその型の を作成することをお勧めします。

[DataContract]
public class MyErrorDetails
{
    [DataMember]
    public string ErrorCode { get; set; }
    [DataMember]
    public string ErrorMessage { get; set; }
}

そして、使用します

[FaultContract(typeof(MyErrorDetails))]

(*) 例外をフォルトとして返さないようにするもう 1 つの理由は、クライアントが必要とするよりも多くの情報をクライアントに開示することです。スタック トレースなどは例外によってシリアル化されますが、これはサービス内部の情報であり、クライアントに送信されるべきではありません。

于 2012-09-24T21:02:31.593 に答える