首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WCF技术剖析之十:调用WCF服务客户端应该如何进行异常处理

一、异常抛出Close失败 一般情况下,当服务端抛出异常,客户客户端服务代理不能直接关闭,WCF执行Close方法过程中会抛出异常。我们可以通过下面的例子来证实这一点。...1和0,服务执行除法运算时候,会抛出DividedByZero异常。...如果我们将其SecurityMode设为None,则在执行Close方法时候则不会抛出任何异常(而实际,服务代理关闭与否对于数据报信道来讲,没有任何意义)。...一般情况下,对于客户端来说,信道在下面两种情况下状态会变成Faulted: 调用超时,抛出TimeoutException 调用失败,抛出CommunicationException 所以正确客户端进行服务调用代码应该如下面的代码所示...:通过try/catch控制服务调用,try控制块中进行正常服务调用并正常关闭服务代理进程(调用Close方法);catch控制块中,捕获CommunicationExceptionTimeoutException

1.9K90
您找到你想要的搜索结果了吗?
是的
没有找到

WCF系列教程之WCF客户端异常处理

、使用客户端或者通过对象调用操作,或者关闭基础客户端通道,都会在客户端应用程序中出现异常,WCF是基于网络通讯服务,错误异常也是要基于消息传递,WCF中提供了一个错误消息处理类FaultException...,WCF客户端可以通过它,来接收服务端传递回来异常信息。...(无效操作异常)) 通常没有有效方法来处理意外错误,所以通产不应该在调用WCF客户端时捕获这些异常 2、预期异常:预期异常包括 (1)、TimeoutException (2)、CommunicationException...  (3)、CommunicationException 任何派生类 上面这些异常表明通信过程中出现问题,该问题可以通过终止WCF客户端并报告通信故障而得到安全处理,因为外部因素可能导致任何应用程序中出现这些错误...1、WCF服务层搭建:新建契约层、服务层、和WCF宿主,添加必须引用(这里不会参考本人前面的随笔),配置宿主,生成解决方案,打开Host.exe,开启服务。

1.1K60

菜菜从零学习WCF五(生成客户端)

可以使用配置文件配置客户端对象以服务正确连接。 2.创建一个WCF客户端对象。   --WCF客户端是表示某个WCF服务一个本地对象,客户端可以使用这种表示形式远程服务进行通信。   ...System.ServiceModel.FaultException对象   --至少将应用程序设置为能够处理可能System.TimeoutException和System.ServiceModel.CommunicationException...但是某些情况中,可能需要更多安全配置,例如配置客户端凭据 那么现在我们来创建客户端进行调用发布IIS中WCF服务。 第一步我们打开命令工具如下图位置 ? 打开工具后,输入以下指令 ?...这里只讲了一种方法进行客户端调用WCF。其实还有其他方法供调用。...我暂时知道还有一种方法就是:WCF客户端直接右键选中查找到调用服务并点击,然后输入服务地址即可引用成功,并在客户端程序中进行调用。。 本节示例代码下载连接点击下载

1.1K20

WCF技术剖析之三十:一个很有用WCF调用编程技巧

进行基于会话信道WCF服务调用中,由于受到并发信道数量限制,我们需要及时关闭信道;当遇到某些异常,我们需要强行中止(Abort)信道,相关原理,可以参考我文章《服务代理不能得到及时关闭会有什么后果...当TimeoutException或者CommunicationException被捕获后,调用Abort方法将信道中止。...当程序执行到using末尾,Dispose方法会进一步调用Close方法对信道进行关闭。...实际,为了对服务调用实现细节进行进一步封装,一般地我们可以将其定义一个独立层中,比如服务代理层(这里层不一定像数据访问层、业务逻辑层一样需要一个明显界限,这里可能就是一个单独类型而已)。...(一般是Presenter层对象),就可以直接实例化服务代理对象,并调用相应方法(这里方法服务契约方法一致)即可,所有关于服务调用细节均被封装在服务代理中。

2.1K110

WCF技术剖析之三十:一个很有用WCF调用编程技巧

进行基于会话信道WCF服务调用中,由于受到并发信道数量限制,我们需要及时关闭信道;当遇到某些异常,我们需要强行中止(Abort)信道,相关原理,可以参考我文章《服务代理不能得到及时关闭会有什么后果...当TimeoutException或者CommunicationException被捕获后,调用Abort方法将信道中止。...当程序执行到using末尾,Dispose方法会进一步调用Close方法对信道进行关闭。...实际,为了对服务调用实现细节进行进一步封装,一般地我们可以将其定义一个独立层中,比如服务代理层(这里层不一定像数据访问层、业务逻辑层一样需要一个明显界限,这里可能就是一个单独类型而已)。...(一般是Presenter层对象),就可以直接实例化服务代理对象,并调用相应方法(这里方法服务契约方法一致)即可,所有关于服务调用细节均被封装在服务代理中。

2K90

WCF技术剖析之二十九:换种不同方式调用WCF服务

我们有两种典型WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布服务元数据生成服务代理相关代码和配置;通过ChannelFactory创建服务代理对象。...在这篇文章中,我们采用一种独特方式进行服务调用。从本质讲,我们只要能够创建于服务端相匹配终结点,就能够实现正常服务调用。...WCF客户端元数据架构体系中,利用MetadataExchangeClient可以获取服务元数据,而利用MetadataImporter将获取元数据导入成ServiceEndpoint对象。...本例中,我们将利用这两个组件定义了一个独特服务调用简单例子,相信可以帮助读者进一步加深对WCF元数据框架体系理解。...接下来,我们将基于ICalculator接口服务契约添加到该WsdlImporter已知契约列表中,调用ImportAllEndpoints方法得到导入ServiceEndpoint列表。

73760

WCF技术剖析之三十:一个很有用WCF调用编程技巧

对于《WCF技术剖析(卷1)》读者,应该会知道第7章中我通过类似于AOP方式解决了相似的问题,现在我们来讨论这个解决方案。 通过《服务代理不能得到及时关闭会有什么后果?》...思路是这样:通过一个对象实现对客户端进行服务访问方法调用劫持,该对象内部实现真正方法调用、服务代理关闭或中断,以及异常处理。...然后ServiceRealProxy借助创建出来服务代理进行真正服务调用,如果服务调用正常完成,则调用Close方法关闭服务代理,如果在调用过程中抛出CommunicationExceptionTimeoutException...catch控制块中,对抛出异常进行处理,由于是通过反射方式实现方法调用,得到异常类型基本都是TargetInvocationException,真正进行服务调用异常被作为捕获异常内部异常(...所以,我们会判断内部异常是否为CommunicationExceptionTimeoutException,来决定是否通过调用Abort方法强行中断服务代理。

74960

系统上线后WCF服务最近经常死掉原因分析总结

得到初步解决方案如下:   1、Web端调用WCF服务使用后,未释放未关闭导致新链接无法访问   2、增加默认连接数,系统默认链接数比较小   3、提供同一个WCF服务不同实例 1、Web...不过自己感觉更好处理方式可能是下面这样,也就是将@dudu中方法进行了简单封装,但自己感觉还有优化空间,暂时还没试出来。...如果超过次数,则需要把其他方法调用插入队列中,以等待处理。 maxConcurrentSessions:同时传输或应用程序会话最大个数。...) : base(endpointConfigurationName) { } 即传入配置名生代码类实例,我们web.config中wcf配置节...总结  暂时这三种方式有效地防止了WCF服务再次挂掉,至少最近几天服务一直稳定运行,没有太大异常,很是让人欣慰。不知道针对WCF服务处理是否还有其他方式,也让博客园大牛们来指点一二吧。

99241

WCF技术剖析之三:如何进行基于非HTTPIIS服务寄宿

介绍IIS7.0时候,我们谈到,HTTP.SYS+W3SVC实现了基于HTTP请求监听,在此基础引入了以下三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP、Named...由于IIS 7本质通过WAS(Windows Process Activation Service)实现了非HTTP请求监听,我们也可以将这种方式服务寄宿称为基于WAS服务寄宿。...然后根目录下创建一个Web.config,配置WCF服务寄宿相关设置。整个WCF配置如下,Binding类型指定为NetTcpBinding。 1: <?...为了实现基于非HTTP服务寄宿,首先需要做是为WCF Service寄宿应用所在Web Site添加非相应非HTTP协议站点绑定(site binding),该操作可以通过执行Appcmd.exe...由于,客户端程序通过访问WCF服务.SVC文件方式进行服务调用,所以相应终结点中地址为.SVC所在地址。

68460

WCF技术剖析之七:如何实现WCFEnterLib PIAB、Unity之间集成

》),也写过WCFPIAB集成(参阅:《WCF后续之旅(8):通过WCF Extension 实现MS Enterprise Library Policy Injection Application...,本质是一个用于对象创建容器。...UnityWCF之间集成,本质就是让WCF使用UnityContainer进行服务实例创建。而WCF框架内部,服务实例创建同时一个特殊对象——InstanceProvider。...GetInstance方法中,我们通过UnityContainer根据服务契约(接口)类新进行具体服务实例创建。...为了证实PIAB效果,我SyncTimeProvider上面应用了CachingCallHandlerAttribute,如果该CallHandler生效的话,方法返回结果将会被缓存,缓存过期之前

59110

WCF后续之旅(11): 关于并发、回调线程关联性(Thread Affinity)

在这种情况下,我们异步操作就需要被Marshal到固定线程执行WCF并发或者Callback情况下也具有这样基于线程关联性问题。...一、从基于Windows Application客户端WCF回调失败谈起 "我WCF之旅"系列文章中,有一篇(WinForm Application中调用Duplex Service出现TimeoutException...这个实现很简单,貌似没有什么问题,但是我们运行程序,客户端就会抛出这样exception。可以看出是一个TimeoutException。 ? 二、是什么导致TimeoutException?...我们现在来分析是什么导致了TimeoutException抛出。...但是我们需要运算结果输入到UITextBox,对UI控件操作需要在UI线程执行,显然会抛出异常了。

827110

WCF后续之旅(11): 关于并发、回调线程关联性(Thread Affinity)

在这种情况下,我们异步操作就需要被Marshal到固定线程执行WCF并发或者Callback情况下也具有这样基于线程关联性问题。...一、从基于Windows Application客户端WCF回调失败谈起 "我WCF之旅"系列文章中,有一篇(WinForm Application中调用Duplex Service出现TimeoutException...这个实现很简单,貌似没有什么问题,但是我们运行程序,客户端就会抛出这样exception。可以看出是一个TimeoutException。 ? 二、是什么导致TimeoutException?...我们现在来分析是什么导致了TimeoutException抛出。...但是我们需要运算结果输入到UITextBox,对UI控件操作需要在UI线程执行,显然会抛出异常了。

96680

并发中同步--WCF并发体系同步机制实现

WCF 并发本质》中,我们谈到了WCF提供三种不同并发模式,使开发者可以根据具体情况选择不同并发处理策略。...对于这三种并发模式,Multiple采用并行执行方式,而Single和Reentrant则是采用串行执行方式。串行执行即同步执行WCF并发框架体系中,这样同步机制是如何实现呢?...一、Concurrency.Single模式下同步实现 实际WCF并发框架体系下针对Concurrency.Single模式实现非常简单,其本质就是对InstanceContext进行加锁。...处理操作执行之前,如果发现相应服务采用并发模式是ConcurrencyMode.Single,WCF运行时会试图获取InstanceContextThisLock锁,或者说后续操作进行再对...如果等待时间超过设定超时时限,客户端会抛出TimeoutException异常。

81060

学会WCF之试错法——客户端调用基础

(String[] args) 位置 e:\projgxz_myself\WCF_Find_Error\Client\Program.cs:行号 17 2 服务地址元数据访问地址 服务器A(192.168.107.13...客户端浏览器输入网址:http://192.168.107.13/S 输出页面为: 点击页面链接:无法访问到A机器服务元素据,这是合理因为localhost代表本机ip,此刻操作是客户端机器...,而不在服务器;客户端机器并没有这个服务,所以服务端终结点配置为:http://localhost/S,元数据检索URI配置为http://192.168.107.13/S 当服务端终结点和元数据访问地址不统一时...ServiceClient client = new ServiceClient())         {                     client.GetData(1);                 } 方法一和方法二可以返回真实原因...,而方法三不能,他们区别在于,方法客户端捕获异常之前关闭了客户端对象,而其他两种方式则是获得异常信息后才关闭客户端对象,所以由上面的测试又可得出WCF客户端程序中慎用using。

1.4K80

WCF技术剖析之三十二:一步步创建一个完整分布式事务应用

完成了对于WCF事务编程(《上篇》、《中篇》、《下篇》)介绍后,本篇文章将提供一个完整分布式事务WCF服务应用,通过本例,读者不仅仅会了解到如何编程实现事务型服务,还会获得其他相关知识,比如DTC...图1 BankingService物理部署拓扑 BankingService和客户端部署主机Foo,定义BankingService转账两个子操作“提取(Withdraw)”和“存储(Deposit...Transfer操作就是调用上述两个服务,由于服务调用设置到对服务代理关闭以及异常处理(相关内容WCF技术剖析(卷1)》第8章有详细介绍),为了实现代码复用,我定义了一个静态ServiceInvoker...因为我们通过OperationBehaviorAttribute特性将BankingServiceTransfer操作TransactionScopeRequired设置成True,这会确保整个操作执行一个事务中进行...在这里要是DTC本实例中可用,重点是对“安全”进行正确设置。图2是我机器设置,限于篇幅问题,我不能对每一个选项进行详细说明,有兴趣读者相信很容易从网上找到相关参考资料。

64280

WCF并发(Concurrency)本质:同一个服务实例上下文(InstanceContext)同时处理多个服务调用请求

WCF服务端框架一个主要任务是将接收到服务调用请求分发给激活服务实例,调用相应服务操作并返回执行结果。也就是说,服务操作执行最终还是会落实到某个具体服务实例。...WCF并发本质可以通过图1体现。 ?...如果一个请求队列中等待时间过长,超过了设置好服务调用超时实现,客户端会跑出TimeoutException异常; Reentrant:该模式和Single一样,InstanceContext...WCF采用正常服务调用相同机制来处理并发回调,实际WCF采用几乎一样机制来实现正常服务调用和回调。...对于这三种并发模式,Multiple采用并行执行方式,而Single和Reentrant则是采用串行执行方式。串行执行即同步执行WCF并发框架体系中,这样同步机制是如何实现呢?

1.1K70
领券