2


0

WCF例外処理はエラーをスローします

こんにちは、wcfで例外を処理する際に問題があります。 私はこのようなサービスを持っています:

[ServiceContract]
public interface IAddressService
{
    [OperationContract]
    [FaultContract(typeof(ExecuteCommandException))]
    int SavePerson(string idApp, int idUser, Person person);
}

WCFTestClientユーティリティのサービスでSavePerson()を呼び出しています。 SavePerson()の実装は次のとおりです。

public int SavePerson(string idApp, int idUser, Person person)
{
    try
    {
        this._savePersonCommand.Person = person;

        this.ExecuteCommand(idUser, idApp, this._savePersonCommand);

        return this._savePersonCommand.Person.Id;
    }
    catch (ExecuteCommandException ex)
    {
        throw new FaultException(ex, new FaultReason("Error in   'SavePerson'"));
    }
}

しかし、私はこのエラーが出ます:

_ サービスの呼び出しに失敗しました。 考えられる原因:サービスはオフラインまたはアクセス不能です。クライアント側の設定がプロキシと一致しません。既存のプロキシは無効です。 詳細についてはスタックトレースを参照してください。 新しいプロキシを起動したり、デフォルト設定に復元したり、サービスを更新したりして、回復を試みることができます。 _

SavePersonメソッドを次の代わりに変更した場合:

catch (ExecuteCommandException ex)
{
    throw new FaultException(ex, new FaultReason("Error in   'SavePerson'"));
}

I do

catch(Exception)
{
    throw;
}

上記のエラーは表示されませんが、例外メッセージのみが表示され、内部例外は表示されません。 何がおかしいのですか?

1 Answer


3


障害コントラクトを定義する場合:

[FaultContract(typeof(ExecuteCommandException))]

例外タイプを指定しないでください。 代わりに、選択したデータコントラクトを指定して、必要と思われる値を返します。

例えば:

[DataContract]
public class ExecuteCommandInfo {
    [DataMember]
    public string Message;
}

[ServiceContract]
public interface IAddressService {
    [OperationContract]
    [FaultContract(typeof(ExecuteCommandInfo))]
    int SavePerson(string idApp, int idUser, Person person);
}

catch (ExecuteCommandException ex) {
    throw new FaultException(new ExecuteCommandInfo { Message = ex.Message }, new FaultReason("Error in   'SavePerson'"));
}