使用 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)
{
}
}
分享到:
相关推荐
wpf-wcf-wf整合开发实例--有利于理解wpf-wcf-wf的整合
WCF--DEMO 在GLD写的第一个DEMO 用到简单的WCF客户端代理类
WCF--system.serviceModel配置属性说明[借鉴].pdf
WCF-学习资料汇总 详细描述WCF的各种处理,配置, 开发中的对操作和数据的抽象 。
实践WCF中的MessageContract与IXmlSerializable
一个WCF的入门——helloWCF 专给第一次写WCF程序的人
WCF学习的相关资料,这些都是我从网上收集整理的,想学习的人有福啦
WCF 项目应用连载[4] - 自定义配置 扩展ServiceHost - LServiceHost WCF 项目应用连载[5] - 自定义配置 扩展ChannelFactory<T> - LDuplex ———————————————————————————————— WCF...
开发工具VS2013 一个简单的Demo解决方案实现以下需求: 多台Host根据XML配置指定某一地址为主服务地址 客户端优先连接主服务Host,当主服务机断连自动检测并连接分服务机,当主服务机恢复服务,自动连回主服务机
国外高校的WCF PPT讲义,很生动的。
Spring.net整合WCF在Winfrom应用程序下调用WCF Spring.NET整合Winfrom
gRPC for WCF Developers
NHibernate+WCF项目实战
WCF结合winform写了,写了个登录跟人员信息获取。懒得写了,而且用了静态工厂结合EF和T4模板。知识点比较多的,入门的可以看看。
一个silverlight 图片上传,下载的功能, 配置WCF,可以上传4m图片,
Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。
js跨域请求windows服务,用vs打开后,运行Golden.Demo.ConsoleApp程序,再在浏览器访问“http://localhost:18086/TestService/1”
wcf-dynclient 动态 WCF 客户端。 此示例为 StackOverflow 问题创建: ://stackoverflow.com/questions/28253109/wcf-client-proxy-implementation
WCF-REST- 电子银行:在线银行系统是使用REST WCF服务开发的。 .NET Framework用作客户端。
WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--