【问题标题】:Handling exceptions WPF Application with a WCF Service使用 WCF 服务处理异常 WPF 应用程序
【发布时间】:2012-01-23 21:40:18
【问题描述】:

我有一个与数据库对话的 WCF 服务。所有操作都通过服务进行。 向客户端返回异常的最佳方式是什么(在本例中为 WPF 应用程序)。

假设我在返回客户列表的服务中有 GetCustomer。但这有一个例外。我应该如何将此异常返回给客户?

【问题讨论】:

    标签: .net wcf .net-4.0 wcf-client


    【解决方案1】:

    一种方法是让有关任何潜在例外情况的信息成为您的服务合同的一部分。因此,在您的示例中,GetCustomer 返回您的客户列表。但它也返回一组可能为空的关于发生的任何异常的数据。这是一个好主意,因为并非您的服务的每个使用者都将成为 .NET 应用程序,依赖发送 .NET 错误是不明智的。

    【讨论】:

      【解决方案2】:

      Microsoft 建议针对 WCF 异常实现 IErrorHandler

      显式控制应用程序的行为,当 抛出异常,实现IErrorHandler接口并添加 到 ErrorHandlers 属性。 IErrorHandler 使您能够显式地 控制生成的 SOAP 故障,决定是否将其发送回 客户端,并执行相关的任务,例如记录。错误 处理程序按照它们添加到 ErrorHandlers 属性。

      实现 ProvideFault 方法来控制故障信息 返回给客户。

      实现 HandleError 方法以确保与错误相关的行为, 包括错误记录、确保快速失败、关闭 应用程序等等。

      Here 是比 MSDN 更好的示例

      IMyService proxy = ...;    //Get proxy from somewhere
      try {
          proxy.MyMethod();
      }
      catch (CommunicationException) { ... }
      catch (TimeoutException) { ... }
      catch (FaultException<MyApplicationFault> myFault) {
          MyApplicationFault detail = myFault.Detail;
          //Do something with the actual fault
      }
      catch (FaultException otherFault) { ... }
      

      【讨论】:

      • 在您的示例中如何将此异常/故障返回给客户端?
      • 你不会从服务中返回异常,而是从服务中抛出异常 throw new FaultException(fault);并且客户端将使用上面的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多