WCF:如何在调用另一个WCF服务时处理错误?

时间:2012-10-15 09:22:11

标签: wcf error-handling

我有一个项目,我应该编写调用另一个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);
    }

还是其他什么?

提前谢谢。

戈兰

1 个答案:

答案 0 :(得分: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); 
} 

您当然也可以使用重试机制,但显然如果您最终得到的是远程服务中的失败,您应该通过抛出适当的错误向您的调用者指明。