1

msdnのこの記事のように例外を Serializable にした場合、例外を WCF でシリアル化できますか?

4

2 に答える 2

1

はい、例外をシリアル化して、WCF で返すことができます。サーバーで発生した実際の例外が WCF クライアントに必要なアプリを作成しました。高レベルの障害だけではありません。

これまでに行ったことを実装する手順は次のとおりです。

1 - 単一の文字列プロパティを持つクラス EncodedException を宣言します

public class EncodedException 
{
     public string SerializedException {get;set;}
}

2 - サービス コントラクトに属性を追加して、サービスが FaultException 例外を返す可能性があることを示します。

[ServiceContract()]
public class MyService
{
    [OperationContract]
    [FaultContract(typeof(EncodedException), 
                  ProtectionLevel = ProtectionLevel.EncryptAndSign)]
     public string Method1 ();
}

3 - サービスの実装で、すべてのサービス操作に try/catch を追加します。

public void Method1()
{
    try
    {
        // some code here
    }
    catch( Exception ex)
    {
        EncodedException encodedException = Helper.SerializeException( ex );
        throw new FaulException<EncodedException>();
    }
}

4 - クライアント コードで例外をキャッチし、アンラップします。

public void someMethod()
{
    try
    {
        serviceClient.Method1();
    }
    catch( FaulException<EncodedException> ex)
    {
        Exception decodedException = Helper.DeserializeException( ex );
        throw new decodedException();
    }
}

5 - ヘルパーを記述して、例外をシリアライズ/デシリアライズします。その部分についてもサポートが必要な場合は、お知らせください。

これが役立つことを願っています。

于 2009-11-18T14:11:17.610 に答える
0

従来の asmx でシリアル化できるオブジェクトを正常に作成できた場合は、WCF で問題ありません。

于 2009-11-18T11:18:04.977 に答える