2

こんにちは私は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<ExecuteCommandException>(ex, new FaultReason("Error in   'SavePerson'"));
    }
}

しかし、私はこのエラーを受け取ります:

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

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

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

そうです

catch(Exception)
{
    throw;
}

上記のエラーは発生しませんが、例外メッセージのみが表示され、内部例外は発生しません。私は何が間違っているのですか?

4

1 に答える 1

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<ExecuteCommandInfo>(new ExecuteCommandInfo { Message = ex.Message }, new FaultReason("Error in   'SavePerson'")); 
}
于 2010-09-02T14:30:05.677 に答える