1

別の WCF サービスを呼び出す WCF サービスを作成する必要があるプロジェクトがあります。次のようになります。

[ServiceContract]
public interface IAsurService
{
    [OperationContract(ReplyAction = AsurService.ReplyAction_GetCatalogList)]
    Message GetCatalogList();

public Message GetCatalogList()
{
    // The external client service
    GetNsiClient client = new GetNsiClient();

    authContext auth = new authContext
    {
        company = "asur_nsi",
        password = "lapshovva",
        user = "dogm_LapshovVA"
    };

    catalogs catalogs = client.getCatalogList(auth);

この場合、どのようにエラーを処理できますか? 次のような標準的なフォールト コントラクト アプローチを使用できますか。

[DataContract]
public class AsurDataFaultException
{
    private string reason;

    [DataMember]
    public string Reason
    {
        get { return reason; }
        set { reason = value; }
    }
}

public Message GetCatalogList()
{
    // The external client service
    GetNsiClient client = new GetNsiClient();

    authContext auth = new authContext
    {
        company = "asur_nsi",
        password = "lapshovva",
        user = "dogm_LapshovVA"
    };

    catalogs catalogs = null;
    try
    {
        catalogs = client.getCatalogList(auth);
    }
    catch (Exception exception)
    {
        AsurDataFaultException fault = new AsurDataFaultException();
        fault.Reason = "The error: " + exception.Message.ToString();
        throw new FaultException<AsurDataFaultException>(fault);
    }

または、他の何か?

前もって感謝します。

ゴラン

4

1 に答える 1

0

リモート WCF サービスの障害によってコードの障害が発生した場合は、明らかに障害をスローする必要がありますが、その障害によって、リモート WCF サービスまたはその例外の内部の詳細が公開されてはなりません。たとえば、次のようになります。

catch (Exception exception) 
{
    // Indicate all that you may expose -- that the data is unavailable.
    DataUnavailableFault fault = new DataUnavailableFault();
    throw new FaultException<DataUnavailableFault>(fault); 
} 

もちろん、再試行メカニズムを使用することもできますが、リモート サービスでエラーが発生した場合は、適切なエラーをスローして呼び出し元に示す必要があります。

于 2012-10-15T13:25:18.763 に答える