1

私の WCF サービスには、いくつかのカスタム フォールト タイプがあります。BaseFault と呼ばれる抽象型と、TypeOneFault および TypeTwoFault と呼ばれるその 2 つの実装

このようにサービス側で例外をスローしています

public string ThisMethodHasFault(string eType)
{
    if (eType.Contains("One"))
    {
        TypeOneFault one = new TypeOneFault("TypeOneFault thrown");
        throw new FaultException<TypeOneFault>(one, new FaultReason(new FaultReasonText("Fault reason here")));
    }
    else
    {
        TypeTwoFault two = new TypeTwoFault("TypeTwoFault thrown");
        throw new FaultException<TypeTwoFault>(two, new FaultReason(new FaultReasonText("Fault reason here")));
    }

    return "";
}

私のサービスインターフェースはこのようなものです

[OperationContract]
[FaultContract(typeof(TypeOneFault ))]
[FaultContract(typeof(TypeTwoFault ))]
string ThisMethodHasFault(string eType);

クライアント側には、このようにキャッチするテスト用の winform アプリケーションがあります。

   MyServiceClient client = new MyServiceClient();

   try
    {
        client.ThisMethodHasFault(""); //get value from user

    }
    catch (FaultException<TypeOneFault>  ox)
    {
         TypeOneFault oneEx = ox.Detail;
         oneEx.{property} ...

    }   
    catch (FaultException<TypeTwoFault>  tx)
    {
         TypeTwoFault twoEx = tx.Detail;
         twoEx.{property} ...
    }    

質問:

上記のメソッドでは、カスタム フォールト クラスのプロパティのみを取得していますが、その中で定義したメソッドは取得していません。このメソッドは、子クラスの TypeOne と TypeTwo に実装する基本抽象クラスで抽象として定義されます。メソッドも取得する方法はありますか?

4

2 に答える 2

4

メソッドはシリアル化されません。データのみ。

于 2012-10-16T12:02:14.283 に答える
0

サポートされているシリアライゼーションはデータ専用です。本質的に、Web サービスは必然的に実装を隠し、サービスのみを提供します。シリアル化されるのは、クライアントが効果的に対話できるようにするためのデータ型です。メソッドをシリアライズする必要はありません。

于 2012-10-16T12:11:49.287 に答える