WCFのFaultContractにUser Define Exceptionを含めたいと思います。 私のWCFアプリケーションでは、FaultContractにExceptionインスタンス/ UserDefine例外インスタンスをカプセル化したいと思います。 下記の私のUserDefine Exceptionを見つけてください。WCFのFaultContractに実際の例外またはカスタム例外を含める方法
public class UserExceptions : Exception
{
public string customMessage { get; set; }
public string Result { get; set; }
public UserExceptions(Exception ex):base(ex.Message,ex.InnerException)
{
}
}
public class RecordNotFoundException : UserExceptions
{
public RecordNotFoundException(Exception ex): base(ex)
{
}
}
public class StoreProcNotFoundException : UserExceptions
{
public string innerExp { get; set; }
public StoreProcNotFoundException(Exception ex,string innerExp)
: base(ex)
{
this.innerExp = innerExp;
}
}
[DataContract]
public class ExceptionFault
{
[DataMember]
public UserExceptions Exception { get; set; }
public ExceptionFault(UserExceptions ex)
{
this.Exception = ex;
}
}
は、と私は
try
{
//Some Code
//Coding Section
throw new RecordNotFoundException(new Exception("Record Not Found"));
//Coding Section
}
catch (RecordNotFoundException rex)
{
ExceptionFault ef = new ExceptionFault(rex);
throw new FaultException<ExceptionFault>(ef,new FaultReason(rex.Message));
}
catch (Exception ex)
{
throw new FaultException<ExceptionFault>(new ExceptionFault((UserExceptions)ex),new FaultReason(ex.Message));
}
tryブロックキャッチCustomException(のRecordNotFoundException)以下のようなサービスで投げる例外だが、クライアントにその例外を送信することができません。あなたは、SOAPクライアントは、あなたのcatchブロックをするために最善FaultException<T>
catch (FaultException<MathFault> e)
{
Console.WriteLine("FaultException<MathFault>: Math fault while doing " + e.Detail.operation + ". Problem: " + e.Detail.problemType);
client.Abort();
}
をキャッチする必要がある例外タイプ
[OperationContract]
[FaultContract(typeof(MathFault))]
int Divide(int n1, int n2);
を期待する知っているように、あなたのOperationContract
方法にFaultContract
属性を追加する必要が
おかげグレン、しかし、私はFaultContract(あなたの例ではMathFault)に独自のExceptionを含めたいので、クライアントは実際の例外や操作や問題のような他のカスタムデータを得ることができます。 – Sourabh
Shortでは、実際の例外をシリアル化して、それをクライアントに送っています。 – Sourabh
@Sourabhああ、私は参照してください。 SOAPサービスでは、DataContractを介してクライアントが認識しているカスタムタイプのみを送信できます。 KnownType属性を追加すると、これが役に立ちます。 –