カスタム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)
に変更すると
は、それが問題を発見
を働いた
に変更すると、それは例外をキャッチする必要があります。 catch例外が一般的な "FaultException"または単に "FaultException"であるかどうかを調べることができますか? –
Coder
これは、イミディエイトウィンドウに「ex」と入力したときのものですか? {"メッセージabt例外"} [System.ServiceModel.FaultException]:{"メッセージabt例外"} ベース{ System.ServiceModel。メッセージ: "メッセージabt例外" アクション: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault" コード:{System.ServiceModel.FaultCode} メッセージ: "メッセージabt例外" 理由:{メッセージabt例外} –
問題が見つかりました。どちらもCreateFault DataContractを持つ2つのサービス参照がありました。そして、私がプログラムを実行したときに間違ったものを使っていました。 私は キャッチ(FaultException EX)に変更 は、それはあなたが答えとしてあなたのソリューションを追加し、受け入れ答えとして、それをしてくださいマークでし –