0

私は、Web サービスからスローされた既知の例外をキャッチし、FaultException<T>.

契約があったとします。

[ServiceContract]
public interface IMyContract
{
    [OperationContract]
    [FaultContract(typeof(MyException))]
    void DoSome();
}

実装クラスにバインドされたインターセプターは、操作でFaultContractAttribute定義されていることがわかり、キャッチするDoSomeと再スローされます。FaultException<MyException>MyException

それはまったく意味がありますか?注意事項はありますか?

WCF コンテキストでいつ実行されているかを認識し、その場合に実行する実装を提案できますか。また、WCF サービスとして実行していない場合 (単体テストなど)、すべての例外が再スローされます。

4

1 に答える 1

0

次のように Castle Windsor Interceptor を試すことができます。

public class FaultContractInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        try
        {
            invocation.Proceed();
        }
        catch (MyException myException)
        {
            var faultAttributes = invocation.Method.GetCustomAttributes(typeof (FaultContractAttribute), inherit: true) as FaultContractAttribute[];

            if (faultAttributes.Any(f => f.DetailType.FullName == typeof (MyException).FullName))
            {
                throw new FaultException<MyException>(myException, myException.Message);
            }
            else
            {
                throw;
            }
        }
    }
}
于 2013-09-17T14:51:26.877 に答える