5

カスタムを作成しようとしていますFaultExceptionDataContractというクラスを作りましたCreateFault

[DataContract]
public class CreateFault
{
    private string report;

    public CreateFault(string message)
    {
        this.report = message;
    }

    [DataMember]
    public string Message
    {
        get { return this.report; }
        set { this.report = value; }
    }
}

次に、サービスメソッドで障害をスローします。

IService1.cs

[OperationContract]
[FaultContract(typeof(CreateFault))]
void TestFaultException();

とでService1.cs

public void TestFaultException()
{
    throw new FaultException<CreateFault>(new CreateFault("CreateFault message"), "Message abt exception");
}

私は私のクライアントでキャッチしFaultExceptionます。

private void btnTest_Click(object sender, RoutedEventArgs e)
{
    try
    {
        ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
        client.TestFaultException();
    }
    catch (FaultException<CreateFault> ex)
    {
        MessageBox.Show(ex.Detail.Message, "Success", MessageBoxButton.OK, MessageBoxImage.Error);
    }
    catch (FaultException ex)
    {
        MessageBox.Show(ex.Message, "Failure", MessageBoxButton.OK, MessageBoxImage.Error);
    }
    catch (Exception ex)
    {
    }
}

ここに問題があります。Visual Studio 2010でWCFサービスアプリケーションプロジェクトを作成すると、期待どおりに機能します。エラーが発生しました:

catch (FaultException<CreateFault> ex)

しかし、カスタムを使用してWCFサービスライブラリプロジェクトを作成するとFaultExceptions、クライアントはカスタム例外を認識しません。代わりに、次のエラーをキャッチします。

catch (FaultException ex)

WCFサービスアプリケーションプロジェクトで機能しないのはなぜですか?

編集:これは、デバッグ中に例外をキャッチしたときに取得するものです

catch (FaultException ex)

(イミディエイトウィンドウに?exと入力)

{"メッセージabt例外"}

[System.ServiceModel.FaultException<WpfApplication1.ServiceReference2.CreateFault>]: {"Message abt exception"}
base {System.ServiceModel.CommunicationException}: {"Message abt exception"}
Action: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault"
Code: {System.ServiceModel.FaultCode}
Message: "Message abt exception"
Reason: {Message abt exception}

Edit2:

問題が見つかりました。両方ともCreateFaultDataContractを持つ2つのサービス参照がありました。そして、私がプログラムを実行したとき、それは間違ったものを使用していました。

に変更したとき

catch (FaultException<ServiceReference2.CreateFault> ex) 

機能した

4

1 に答える 1

5

問題が見つかりました。CreateFault DataContract を持つ 2 つの Service 参照がありました。そして、プログラムを実行したときに間違ったものを使用していました。

に変えた時

catch (FaultException<ServiceReference2.CreateFault> ex) 

出来た

于 2012-02-28T07:27:23.203 に答える