1

私はこのようにcustom FaultExceptionを使いたい

 [DataContract]
public class Fault
{
    [DataMember]
    public string Message { get; set; }
}

public class MyFault<T>:FaultException<T> where T : Fault
{
     public MyFault(T faultClass)
        : base(faultClass, new FaultReason(faultClass.Message))
    {

    }
}

...

throw new MyFault<Fault>(new Fault {Message = "hello"});

...

インターフェース

[OperationContract]
[FaultContract(typeof(Fault))]
string GetData2(int value);

しかし、クライアントに到達すると、FaultException に変換されます

      try
        {
            var res = serv.GetData2(1);
        }
        catch (MyFault<WcfService1Sample.Fault> ex)
        {
            label1.Text = ex.Reason.ToString(); //-> i want here
        }
        catch (FaultException<ServiceReference1.Fault> ex)
        {
            label1.Text = ex.Reason.ToString(); //-> catch here
        }
        catch (Exception)
        {

            throw;
        }

clint のカスタム フォールトをキャッチできますか? または、WCF が自動的にそれを FaultException に変換します。この問題を機能させるにはどうすればよいですか

ありがとう

4

1 に答える 1

1

2つの問題があると思います。初め:

  • シャンビュレーターが言ったこと:あなたのカスタムFaultクラスは
    • DataContractおよび使用
    • DataMemberシリアル化するすべてのプロパティをマークします。

これが行われると、WCF は

  • サービス側throw new FaultException<MyFault>(new MyFault { ... });を、データを含むあなたの障害を含むメッセージに変換します。と
  • クライアント側でこの障害を に変換しますFaultException<MyFault>

2番:

このクライアント側FaultException<>は、WCF によって生成されます。カスタム Exception-Translator を登録できるかもしれませんが、私はそれを使用したことも、必要としたこともありませんでした。FaultExceptionplus custom Fault-typeを使用することをお勧めします。

于 2012-08-29T09:57:16.343 に答える