`
wyf
  • 浏览: 433628 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

WCF-IErrorHandler

 
阅读更多

使用 IErrorHandler 接口,我们可以更深入地参与到 WCF 的异常处理过程当中。我们甚至可以改变异常消息细节,而不仅仅是做些错误记录。

public interface IErrorHandler
{
  void ProvideFault(Exception error, MessageVersion version, ref Message fault);
  bool HandleError(Exception error);
}

ProvideFault 方法在服务方法发生异常,WCF 返回异常消息,终止会话之前被调用。该方法通常被用来修改返回的异常消息,诸如进行重新包装等等。由于调用 ProvideFault 时,客户端处于阻塞状态,因此不要在其内部做长时间的处理,以免客户端超时。而 HandleError 在异常返回给客户端之后被触发,因此它不会阻塞通讯。多数时候只是用来完成异常记录,进行错误提示等操作。

要使用 IErrorHandler, 除了创建一个具体类型外,还要使用另外一个接口 —— IServiceBehavior。通过 IServiceBehavior 我们可以将自己的 ErrorHandler 安装到 Channel Dispatcher 异常处理集合当中。IServiceBehavior 接口有三个方法,我们只用到 ApplyDispatchBehavior(),而另外两个可以不用管它。

[ServiceContract]
public interface IService
{
  [OperationContract]
  void Test();
}

public class ErrorHandler : IErrorHandler
{
  public bool HandleError(Exception error)
  {
    Console.WriteLine("HandleError:{0}", error.Message);
    return false;
  }

  public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
  {
    if (error is IOException)
    {
      FaultException<int> e = new FaultException<int>(123, "IO Exception...");
      MessageFault m = e.CreateMessageFault();
      fault = Message.CreateMessage(version, m, e.Action);
    }
  }
}

public class Service : IService, IDisposable, IServiceBehavior 
{
  public void Test()
  {
    throw new IOException();
  }

  public void Dispose()
  {
    Console.WriteLine("Dispose...");
  }

  public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
  {
    IErrorHandler handler = new ErrorHandler();
    foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
    {
      dispatcher.ErrorHandlers.Add(handler);
    }
  }

  public void AddBindingParameters(ServiceDescription serviceDescription, ...)
  {
  }

  public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
  {
  }
}
 
分享到:
评论

相关推荐

    WCF学习笔记,一步一步教你学习WCF

    ### WCF学习笔记知识点概述 #### 一、基本概念 - **定义**:WCF(Windows Communication Foundation)是微软提供的一种框架,用于构建基于服务的应用程序。它将各种通信技术如HTTP、TCP/IP、MSMQ等整合到一个统一的...

    WCF示例-第二章-存储库

    9. **错误处理和异常安全**:学习如何在服务中正确处理错误,通过FaultException抛出有意义的错误信息,以及使用IErrorHandler接口进行自定义错误处理。 10. **安全性**:理解身份验证、授权和加密等安全机制,如何...

    WCF 学习笔记(包括WCF基本知识、Security、MSMQ、Transaction等等)

    - **IErrorHandler**:定义服务级别的错误处理策略。 - **MaxStringContentLength & MaxReceivedMessageSize**:配置最大消息长度和字符串内容大小。 - **SecurityNegotiationException**:一种安全相关的异常。 ...

    WCF实例(配置、编写、注意事项)

    1. **错误处理**:WCF提供了一套完整的异常处理机制,包括 FaultContractAttribute 和 IErrorHandler 接口。 2. **事务支持**:WCF可以集成.NET事务,确保一组操作的原子性。 3. **安全性**:WCF支持多种安全模式,...

    《WCF按部就班学习系列6_WCF错误概述》

    WCF允许开发人员通过实现`IErrorHandler`接口来自定义错误处理行为。`IErrorHandler`包含两个方法:`ProvideFault`用于在服务上生成错误契约,`HandleError`用于在服务上处理异常但不返回给客户端。 ```csharp ...

    10.如何在WCF进行Exception Handling

    在Windows Communication Foundation (WCF) 中,异常处理是一项至关重要的任务,因为...通过自定义`FaultException`、使用`IErrorHandler`接口、配置服务行为以及记录异常日志,我们可以构建健壮且用户友好的WCF服务。

    《构建WCF面向服务的应用程序》_Demo

    7. **故障诊断与日志记录**:了解如何使用WCF的错误处理机制,如FaultException和IErrorHandler,以及如何实现日志记录以辅助调试。 8. **服务发现**:WCF提供服务发现功能,允许服务自动广播其存在,以便客户端...

    wcf之契约和异常处理

    在.NET框架中,Windows Communication Foundation(WCF)是一种用于构建分布式应用程序的服务模型。它提供了一种统一的方式来创建、部署和管理跨平台、跨网络的服务。本文将深入探讨WCF中的契约和异常处理机制,这...

    WCF基本异常处理模式[上篇].doc

    在WCF(Windows Communication Foundation)中,异常处理是服务稳定性及用户体验的重要组成部分。WCF作为一个面向服务的应用框架,它允许开发者构建分布式应用程序,而异常处理则确保了在服务执行过程中出现错误时,...

    WCF_Samples

    5. **错误处理和异常处理**: 如FaultContract和IErrorHandler的使用,展示如何优雅地处理错误和异常。 6. **多协定和多终结点服务**: 演示一个服务如何同时支持多种通信协议和接口。 7. **发布WSDL和元数据**: 展示...

    构建WCF面向服务的应用程序系列课程(4):异常与错误处理.zip

    在构建Windows Communication Foundation (WCF)面向服务的应用程序时,异常和错误处理是不可或缺的部分。这一系列课程的第四部分专门探讨了如何在WCF服务中有效地管理异常和错误,以确保服务的稳定性和可靠性。以下...

    如何在WCF中处理错误而无需明确声明它们

    3. **使用IExceptionHandler服务扩展**:在WCF 4.0及更高版本中,还可以使用服务扩展`IExceptionHandler`,这与`IErrorHandler`类似,但提供了更细粒度的控制,允许处理特定类型的异常。 4. **异常过滤器**:在服务...

    wcf3.5实例

    WCF(Windows Communication Foundation) - 契约(Contract):服务契约(ServiceContract),操作契约(OperationContract),数据契约(DataContract), 服务已知类型(ServiceKnownType),数据成员(DataMember)。 介绍 ...

    在基于WCF的应用程序中处理SOAP异常

    在基于Windows Communication Foundation (WCF) 的应用程序中,处理SOAP异常是确保服务稳定性和健壮性的重要环节。SOAP异常是WCF服务在遇到错误时抛出的,它们以SOAP消息的形式封装了错误信息,以便跨网络传递。本篇...

    有状态应用程序中的WCF(WPF / Silverlight)

    这包括使用`try-catch`语句块捕获异常,实现`IErrorHandler`接口进行自定义错误处理,以及配置服务行为以控制服务的故障恢复策略。 3. **服务关闭**:当服务因故关闭或重启时,有状态应用需要处理丢失数据的风险。...

    silverlight用户验证示例

    - `SilverlightValidationDemo`项目可能包含以下部分:客户端的XAML和C#代码(用于用户界面和验证逻辑),服务端的WCF服务接口和实现,以及服务引用配置。 - 示例可能演示了如何创建自定义验证规则,如何在XAML中...

Global site tag (gtag.js) - Google Analytics