カスタムを作成しようとしていますFaultException
。DataContract
というクラスを作りました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)
機能した