使用 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(Windows Communication Foundation)是微软提供的一种框架,用于构建基于服务的应用程序。它将各种通信技术如HTTP、TCP/IP、MSMQ等整合到一个统一的...
- **使用 `IErrorHandler` 实现自定义错误逻辑处理**:提供更灵活的异常处理方式。 通过以上内容的学习,我们可以深入了解 WCF 的基本概念、架构设计、服务实现以及异常处理等方面的知识点,这对于掌握 WCF 开发...
9. **错误处理和异常安全**:学习如何在服务中正确处理错误,通过FaultException抛出有意义的错误信息,以及使用IErrorHandler接口进行自定义错误处理。 10. **安全性**:理解身份验证、授权和加密等安全机制,如何...
- **IErrorHandler**:定义服务级别的错误处理策略。 - **MaxStringContentLength & MaxReceivedMessageSize**:配置最大消息长度和字符串内容大小。 - **SecurityNegotiationException**:一种安全相关的异常。 ...
1. **错误处理**:WCF提供了一套完整的异常处理机制,包括 FaultContractAttribute 和 IErrorHandler 接口。 2. **事务支持**:WCF可以集成.NET事务,确保一组操作的原子性。 3. **安全性**:WCF支持多种安全模式,...
WCF允许开发人员通过实现`IErrorHandler`接口来自定义错误处理行为。`IErrorHandler`包含两个方法:`ProvideFault`用于在服务上生成错误契约,`HandleError`用于在服务上处理异常但不返回给客户端。 ```csharp ...
在Windows Communication Foundation (WCF) 中,异常处理是一项至关重要的任务,因为...通过自定义`FaultException`、使用`IErrorHandler`接口、配置服务行为以及记录异常日志,我们可以构建健壮且用户友好的WCF服务。
7. **故障诊断与日志记录**:了解如何使用WCF的错误处理机制,如FaultException和IErrorHandler,以及如何实现日志记录以辅助调试。 8. **服务发现**:WCF提供服务发现功能,允许服务自动广播其存在,以便客户端...
在.NET框架中,Windows Communication Foundation(WCF)是一种用于构建分布式应用程序的服务模型。它提供了一种统一的方式来创建、部署和管理跨平台、跨网络的服务。本文将深入探讨WCF中的契约和异常处理机制,这...
在WCF(Windows Communication Foundation)中,异常处理是服务稳定性及用户体验的重要组成部分。WCF作为一个面向服务的应用框架,它允许开发者构建分布式应用程序,而异常处理则确保了在服务执行过程中出现错误时,...
5. **错误处理和异常处理**: 如FaultContract和IErrorHandler的使用,展示如何优雅地处理错误和异常。 6. **多协定和多终结点服务**: 演示一个服务如何同时支持多种通信协议和接口。 7. **发布WSDL和元数据**: 展示...
在构建Windows Communication Foundation (WCF)面向服务的应用程序时,异常和错误处理是不可或缺的部分。这一系列课程的第四部分专门探讨了如何在WCF服务中有效地管理异常和错误,以确保服务的稳定性和可靠性。以下...
3. **使用IExceptionHandler服务扩展**:在WCF 4.0及更高版本中,还可以使用服务扩展`IExceptionHandler`,这与`IErrorHandler`类似,但提供了更细粒度的控制,允许处理特定类型的异常。 4. **异常过滤器**:在服务...
WCF(Windows Communication Foundation) - 契约(Contract):服务契约(ServiceContract),操作契约(OperationContract),数据契约(DataContract), 服务已知类型(ServiceKnownType),数据成员(DataMember)。 介绍 ...
在基于Windows Communication Foundation (WCF) 的应用程序中,处理SOAP异常是确保服务稳定性和健壮性的重要环节。SOAP异常是WCF服务在遇到错误时抛出的,它们以SOAP消息的形式封装了错误信息,以便跨网络传递。本篇...
这包括使用`try-catch`语句块捕获异常,实现`IErrorHandler`接口进行自定义错误处理,以及配置服务行为以控制服务的故障恢复策略。 3. **服务关闭**:当服务因故关闭或重启时,有状态应用需要处理丢失数据的风险。...
- `SilverlightValidationDemo`项目可能包含以下部分:客户端的XAML和C#代码(用于用户界面和验证逻辑),服务端的WCF服务接口和实现,以及服务引用配置。 - 示例可能演示了如何创建自定义验证规则,如何在XAML中...