2015-10-24 43 views
0

我想知道如果我可以创建一个方法来返回使用WCF客户端捕获不同的对象。我想用所有的异常细节来格式化一个引用类型,并通过WCF客户端返回它。这是我想要实现的代码。在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; 
      } 
     } 

的实现现在在抓我想返回ErrorMessageDto对象,但该方法定义PendingAccountDto的返回类型。我希望wcf客户端通过客户端返回ErrorMessageDto,如果一个catch被触发,但是,我不能这样做,因为返回类型期望PendingAccountDto。我查看了FaultCOntracts,但每个教程都将其显示为一个throw,并且我希望返回,以便可以通过客户端查看该对象。有任何想法吗?返回类型的泛型不适用于WCF方法。 任何意见将不胜感激。当我尝试并设置

pendingAccount.Error = ExceptionBuilder.LogErrors(ex); 

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

1个字..继承。 :)。或者你可以创建一个具有成功/失败对象以及“正常”结果的类......一个响应对象。让客户对响应进行检查,以确定事情是否发生。 –

回答

1

从技术上来说,可以

应用程序退出。

您只需要将ErrorMessageDTO对象组合/嵌套在PendingAccountDTO对象内,并且可能还会提供一个访问方法调用GetErrorMessageDTO(),以便API的调用方在错误场景中检索它。

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

  1. 捕获异常
  2. 创建ErrorMessageDTO对象
  3. 的ErrorMessageDTO对象添加到PendingAccountObject
  4. 回报PendingAccountObject

那么你的API的调用者必须知道的通过调用某种API发生错误。我想你可能有一个API调用“HasSucceed()”,它检查并查看ErrorMessageDTO是否被填充,如果它是然后返回,其他

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

+0

嗯病给了一个尝试和回应,所以基本上我的PendingAccountObject包含ErrorMessageDto作为一个属性。 – devzim

+0

是的,这就是我的想法。 –

+0

似乎应用程序退出时pendingAccount.Error = ExceptionBuilder.LogErrors(EX);被执行。它甚至不会在最后回到 – devzim

相关问题