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 回答