您好,登录后才能下订单哦!
这期内容当中小编将会给大家带来有关关于WCF异常处理解决方案是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
异常处理在我们的程序中是不可缺少的,异常可以反馈我们信息,如果还不知道WCF异常的朋友请看下面我为大家介绍一下。异常消息与特定技术有关,.NET异常同样如此,因而WCF并不支持传统的异常处理方式。如果在WCF服务中采用传统的方式处理异常,由于异常消息不能被序列化,因而客户端无法收到服务抛出的WCF异常,例如这样的服务设计:
[ServiceContract(SessionModeSessionMode = SessionMode.Allowed)] public interface IDocumentsExplorerService { [OperationContract] DocumentList FetchDocuments(string homeDir); } [ServiceBehavior(InstanceContextModeInstanceContextMode=InstanceContextMode.Single)] public class DocumentsExplorerService : IDocumentsExplorerService,IDisposable { public DocumentList FetchDocuments(string homeDir) { //Some Codes if (Directory.Exists(homeDir)) { //Fetch documents according to homedir } else { throw new DirectoryNotFoundException( string.Format("Directory {0} is not found.",homeDir)); } } public void Dispose() { Console.WriteLine("The service had been disposed."); } }
则客户端在调用如上的服务操作时,如果采用如下的捕获方式是无法获取该WCF异常的:
catch (DirectoryNotFoundException ex) { //handle the exception; }
为了弥补这一缺陷,无法识别的WCF异常均当作为FaultException异常对象,因此,客户端可以捕获FaultException或者Exception异常:
catch (FaultException ex) { //handle the exception; } catch (Exception ex) { //handle the exception; }
全面阐述WCF可靠性传输性能
编程实现WCF有序传递案例分析
关于WCF服务元数据交换编程揭密
三种WCF服务方式一点通
谈谈关于WCF事务属性
然而,这样捕获的异常,却无法识别DirectoryNotFoundException所传递的错误信息。尤为严重的是这样的异常处理方式还会导致传递消息的通道出现错误,当客户端继续调用该服务代理对象的服务操作时,会获得一个CommunicationObjectFaultedException 异常,无法继续使用服务。如果服务被设置为PerSession模式或者Single模式,异常还会导致服务对象被释放终止服务。WCF并不推荐在应用程序域中创建多个ServiceHost实例。如果要托管多个服务,完全可以在一个宿主中通过多个Endpoint公开多个WCF服务。由于应用程序域对安全进行了隔离,如果需要提供不同的安全上下文,则有必要创建多个ServiceHost实例。
上述就是小编为大家分享的关于WCF异常处理解决方案是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。