WCF サービスに FaultException を実装しようとしています。いろいろな記事を参考にしました。ただし、クライアントで FaultExceptions がキャッチされることはないようです。私はこのようなコードを書きました、
サービス契約 -
[ServiceContract]
public interface IService2
{
[OperationContract]
[FaultContract(typeof(MyException))]
[DebuggerStepThrough]
MyException GetData(int value);
}
[DataContract]
public class MyException
{
[DataMember]
public bool Result { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public Exception MyInnerException { get; set; }
[DataMember]
public string ClientMessage { get; set; }
}
サービスの実装 -
public class Service1 : IService2
{
public MyException GetData(int value)
{
MyException mx = new MyException();
try
{
double a = 44;
if (value == 0)
{
throw new DivideByZeroException();
}
double res = a / value;
mx.ClientMessage = "Everything is well";
mx.Result = true;
return mx;
}
catch (DivideByZeroException dvex)
{
mx.Result = true;
mx.ClientMessage = "Divide by zero";
mx.MyInnerException = dvex;
mx.ErrorMessage = dvex.StackTrace;
throw new FaultException<MyException>(mx, dvex.ToString());
}
}
}
クライアント (aspx.cs ページ) -
try
{
FaultContractsDemo.ServiceReference1.Service2Client o = new ServiceReference1.Service2Client();
MyException data = o.GetData(0);
if (data.Result)
lblMessage.Text = "All is well";
}
catch (FaultException<MyException> ex)
{
lblMessage.Text = ex.Detail.ClientMessage;
}
サービス層は例外をスローしますが、クライアントは例外を受け取りません。次のような未処理の例外が発生しています。
基になる接続が閉じられました: 接続が予期せず閉じられました。