WCF 服务端的异步
2015-09-17 15:03
183 查看
WCF的异步可分为客户端和服务端。这篇文章介绍服务端的异步实现
自己碰到了这样的一个问题, 我们系统的服务端数据量特别大,程序执行时间长,导致客户端请求会中断链接,这样客户端就得不到回应,所以因这个问题对WCF的异步做了一些研究,但是发现它并不是解决这个问题的办法。下面我讲下服务端异步。
服务端异步,WCF技术内幕这本书中就简单的几句话。操作中执行I/O的操作,这样可以用异步,因为这样可以带来更多的伸缩性。如果只单纯的执行计算任务,没必要使用异步,因为这会导致性能问题。
在这里,我以个人的了解,解释下服务端异步的作用和使用的情况。异步操作是释放当前线程,让另一个线程去执行任务。对于服务端的程序而言,接收请求的线程有限,所以如果当前线程在执行任务,这样就没有办法去处理新的请求,而降低了请求的并发量。如果释放了这个线程,那它又可以去处理新进来的请求,从而提高请求的并发量。当然线程的切换会消耗时间和资源。所以一般在I/O请求等耗时的操作上使用服务端异步。
至于服务端的异步实现方式,网上有很多,在这里我推荐几个网址给大家。
点击打开链接
点击打开链接
经过我的测试,必须要根据约定定义方法,返回值必须为IAsyncResult的子类
自己碰到了这样的一个问题, 我们系统的服务端数据量特别大,程序执行时间长,导致客户端请求会中断链接,这样客户端就得不到回应,所以因这个问题对WCF的异步做了一些研究,但是发现它并不是解决这个问题的办法。下面我讲下服务端异步。
服务端异步,WCF技术内幕这本书中就简单的几句话。操作中执行I/O的操作,这样可以用异步,因为这样可以带来更多的伸缩性。如果只单纯的执行计算任务,没必要使用异步,因为这会导致性能问题。
在这里,我以个人的了解,解释下服务端异步的作用和使用的情况。异步操作是释放当前线程,让另一个线程去执行任务。对于服务端的程序而言,接收请求的线程有限,所以如果当前线程在执行任务,这样就没有办法去处理新的请求,而降低了请求的并发量。如果释放了这个线程,那它又可以去处理新进来的请求,从而提高请求的并发量。当然线程的切换会消耗时间和资源。所以一般在I/O请求等耗时的操作上使用服务端异步。
至于服务端的异步实现方式,网上有很多,在这里我推荐几个网址给大家。
点击打开链接
点击打开链接
经过我的测试,必须要根据约定定义方法,返回值必须为IAsyncResult的子类
public IAsyncResult BeginGetData(string fileName, AsyncCallback userCallback, object stateObject)
public string EndGetData(IAsyncResult ar)这样,WCF框架才能帮你调用BeginGetData,等执行完成后,再帮你调用EndGetData,返回值给客户端。
相关文章推荐
- 经纬度多边形点判断
- ZOJ 1003 Crashing Balloon
- 【HTML】【实践】使用Canvas制作网页小游戏
- Unity基础—射线概念和API
- ArcGIS新的小功能
- Spring+Hibernate配置多数据源
- 09.17,习题
- go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go
- iOS程序员必须知道的Android要点
- android-4.2.1_r1 Porting PPPoE
- 软件测试之我看
- 如何在电脑上搭建一个私服,实现maven项目的上传和下载?
- test3.13
- python中str函数isdigit、isdecimal、isnumeric的区别
- 反编译之apktool
- VS发布,应用程序验证未成功。无法继续。
- Asp.net Response.Redirect with post data
- 页面跳转确认
- Tornado编程基础
- 解决SVN检出的maven项目不是maven项目