2012-02-27 10 views
5

カスタムFaultExceptionを作成しようとしています。 CreateFaultというDataContractクラスを作成しました。クライアントでWCFカスタムフォールト例外が正しくキャッチされない

[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) 

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

catch (FaultException ex) 

なぜWCFサービスアプリケーションプロジェクトでは機能しませんか?編集

: これは

catch (FaultException ex) 

(?イミディエイトウィンドウに入力されたEX)

で例外をキャッチしたときに、デバッグ中に私が得るものです

[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} 
{ "メッセージ例外ABT"}

編集2:

問題が見つかりました。どちらもCreateFault DataContractを持つ2つのサービス参照がありました。そして、私がプログラムを実行したときに間違ったものを使っていました。私は

catch (FaultException<ServiceReference2.CreateFault> ex) 

に変更すると

は、それが問題を発見

+0

を働いた

catch (FaultException<ServiceReference2.CreateFault> ex) 

に変更すると、それは例外をキャッチする必要があります。 catch例外が一般的な "FaultException "または単に "FaultException"であるかどうかを調べることができますか? – Coder

+0

これは、イミディエイトウィンドウに「ex」と入力したときのものですか? {"メッセージabt例外"} [System.ServiceModel.FaultException ]:{"メッセージabt例外"} ベース{ System.ServiceModel。メッセージ: "メッセージabt例外" アクション: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault" コード:{System.ServiceModel.FaultCode} メッセージ: "メッセージabt例外" 理由:{メッセージabt例外} –

+0

問題が見つかりました。どちらもCreateFault DataContractを持つ2つのサービス参照がありました。そして、私がプログラムを実行したときに間違ったものを使っていました。 私は キャッチ(FaultException EX)に変更 は、それはあなたが答えとしてあなたのソリューションを追加し、受け入れ答えとして、それをしてくださいマークでし –

答えて

4

を働きました。どちらもCreateFault DataContractを持つ2つのサービス参照がありました。そして、私がプログラムを実行したときに間違ったものを使っていました。

私はそれがすべてのアカウントでは

関連する問題