おそらく質問のタイトルから、私がWCFを初めて使用することがわかります。この Web サービスを実装しましたが、メソッドの 1 つがカスタムの FaultException をスローします。
namespace Feed
{
[ServiceContract]
public interface IMyClass
{
[OperationContract]
[FaultContract(typeof(CustomError))]
DataSet MyMethod(int A, int T);
}
[DataContract]
public class CustomError
{
public CustomError(string msg, int code, int id)
{
Id = id;
ErrorMessage = msg;
ErrorCode = code;
}
[DataMember]
[DataMember]
public string ErrorMessage
{
get;
set;
}
[DataMember]
public int ErrorCode
{
get;
set;
}
[DataMember]
public int Id
{
get;
set;
}
}
}
次に、MyMethod の実装で適切な例外をスローします。
namespace Feeds
{
public class MyClass : IMyClass
{
DataSet MyMethod(int A, int T)
{
try
{
//todo
DataSet ds = new DataSet();
return ds;
}
catch (Exception ex)
{
throw new FaultException<CustomError>(new CustomError("a", 1, 0));
}
}
}
}
ここまでは順調ですね。ここで、この Web サービスを使用する単純な ASP.NET Web サイトを作成しました。その Web サイトに MyClass.svc Web サービスの WebReference を追加しました。問題は、例外をキャッチしようとしているときに、catch(FaultException ex) { } CustomError を認識できないことです。次のトラブルシューティングを行いました: 1. wsdl が更新されていることを確認します (何度も実行し、他のことを変更しようとしましたが、すべてがクライアント側に反映されています) 2. BasicHttpBinding と wsHttpBinding を試しました (それが違いを生むかどうかはわかりません) 3. Google でよく検索し、MSDN のサンプル コードに忠実に従っています。
まだ運がない!何か不足していますか?どんな提案でも大歓迎です。