在WCF方法中返回不同的对象 - 不是抛出

时间:2015-10-24 21:31:17

标签: c# asp.net web-services wcf object

我想知道我是否可以使用WCF客户端创建一个方法来返回catch中的其他对象。我想格式化具有所有异常详细信息的引用类型,并通过WCF客户端返回它。这是我想要实现的代码。

[OperationContract]
PendingAccountDto createAccount(AccountActivationDto account);

我的接口实现

public PendingAccountDto createAccount(AccountActivationDto account)
        {
            try
            {
                DatabaseHelper.CheckForDatabaseAndCreate();
                AccountDto newAccount = new PendingAccountDto(account);
                response = DatabaseHelper.CreatePendingAccount(newAccount);
                ActivationEmailer.SendEmail(newAccount);
                PendingAccountDto pendingAccount = (PendingAccountDto)newAccount;
                return pendingAccount;
            }
            catch(Exception ex)
            {
                ErrorMessageDto error = ExceptionBuilder.LogErrors(ex);
                return error;
            }
        }

现在在catch中我想返回一个ErrorMessageDto对象,但该方法定义了一个返回类型PendingAccountDto。如果触发了catch,我希望wcf客户端通过客户端返回ErrorMessageDto,但是我不能这样做,因为返回类型期待PendingAccountDto。我已经查看过FaultCOntracts但是每个教程都将它显示为throw,我想要一个返回,这样我就可以通过客户端查看对象了。有任何想法吗?返回类型的泛型不适用于WCF方法。 任何建议都将不胜感激。

当我尝试设置

时,应用程序退出
pendingAccount.Error = ExceptionBuilder.LogErrors(ex);

       PendingAccountDto pendingAccount = new PendingAccountDto();
        pendingAccount.Error = ExceptionBuilder.LogErrors(ex);
        response.FailedTransaction(ex);
        return pendingAccount;

1 个答案:

答案 0 :(得分:1)

从技术上讲,这是可能的。

您需要做的就是使ErrorMessageDTO Object复合/嵌套在PendingAccountDTO对象中,并且可能还为API的调用者提供一个访问器方法调用GetErrorMessageDTO(),以便在错误的场景中检索它。

所以你的代码会做类似的事情;

  1. 捕捉异常
  2. 创建ErrorMessageDTO对象
  3. 将ErrorMessageDTO对象添加到PendingAccountObject
  4. 返回PendingAccountObject
  5. 然后,API的调用者必须通过调用某种API来知道发生了错误。我想你可能有一个API调用" HasSucceed()",它检查并查看ErrorMessageDTO是否已填充,如果是,则返回 False ,其他

    在HasSucceed()报告False的情况下,调用者将执行GetErrorMessageDTO()来检索它。