200分请求一个Web Service的问题,各位帮帮。

ycg_893 2010-11-06 05:26:02
在开发一个企业业务管理系统,使用的是SilverLight + Web Service + WCF
前期开发时,SilverLight + Web Service时行开发,在开发与测试中没有发现什么问题,后来由于需要加入消息提示,待办事项提示、以及在线聊天,因此加入了WCF的双工通信(该功能并参与任何业务功能,只是把处理好的消息通过WCF即时通信)。使用的是IIS默认的应用程序池,由于有些功能是定时检测,因此在IIS的应用程池中关闭了“性能-空闭时段关闭工作进程”。

在线用户数平均约为50个,使用均正常,但每一天大约(13:00-16:00)期间会出现阻塞,并且只要发生这个阻塞,所有的客户端均被阻塞,速度非常慢,但有时还是可以访问(似乎是未超时前获取了数据)。只要是访问WCF或Web Service的方法里只要有异常我均写入了日志,但日志中并有没异常。而这个时候w3wp进程的内存约210M,CPU的使用率基本是0%,很像是IIS无响应,若退出重新登陆会正常,但过不了一两分钟就马上发生阻塞。在“事件查看器的-应用程序”中没有发现错误或异常。

望各位帮我分析分析。先谢了!
...全文
398 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
devin_jia 2010-11-18
  • 打赏
  • 举报
回复
学习。
zhgroup 2010-11-18
  • 打赏
  • 举报
回复
解决了就好
ycg_893 2010-11-18
  • 打赏
  • 举报
回复
谢谢各位了,解决了。是线程阻塞时造成对象互锁,为了确保用户正常登陆与注销,期间不允许其他对象访问,但WCF出现掉线后重连造成的阻塞(默认是1分钟超时),而没有释放用户登陆的对象,但Web在操作数据时为了验证权限需要访问登陆的用户对象,就此产生了阻塞。
whrspsoft3723 2010-11-12
  • 打赏
  • 举报
回复
http://www.dusike.com/webfuwuyunxingguochengzhongshujukulianjiezhongduan/
朋友,我们网站遇到 的一个小问题,跟你说的类似,不同在于数据库链接不会释放, 其实我的webserver执行完就释放 了,只是线程没有释放(其实最终是资源问题,不过,我们的服务器内存实在太大了,机器 没有死,数据库先不却), 调整后,好了。 但愿能帮到你。 链接中是我们的调整过程 。
ycg_893 2010-11-11
  • 打赏
  • 举报
回复
原来是Web Service,由于需要即时通信,以及消息通知,后来加了WCF,但只是用来消息通知,让客户知道有消息了,再通过Web Service获取消息。由于是后来加的,因此并没有参与业务上的数据交付。服务器有一个线程扫描在线用户的消息情况(有的是业务发生时通过事件通知),如果有消息则通过WCF通知客户端(最初的方案是客户端有计时器<即客户端主动询>,但这种即时性差,并且客户端多的话服务器的压力应该比用WCF的大)。
ycg_893 2010-11-10
  • 打赏
  • 举报
回复
只要阻塞时,无论客户端何时登陆均被阻塞。而只有阻塞时才发生DB连接数会增加。最多也就是30-40个连接,连接池是100个,若DB问题为什么几十个客户端需要使用上4个小时以上才会发生阻塞,但服务器的内存、CPU均没有出现上升现象,发生阻塞时数据库并没有阻塞(在发生时单独打开查询测试,并且也查询了事务的阻塞)。到现在还是找不到是什么原因。因为系统已上线,不能停,只有每天发生阻塞时才会利用较短的时间分析一下,重启IIS所有恢复正常。现在得每天都重启一下IIS。没办法呀!在测试环境下什么搞都不出问题。
ncqingchuan1976 2010-11-10
  • 打赏
  • 举报
回复
定时回收应用程序池看看
zsc970 2010-11-10
  • 打赏
  • 举报
回复
如果每次发生都在下午,可能是你的服务器设置有关吧?比如开始杀毒.
烈火蜓蜻 2010-11-10
  • 打赏
  • 举报
回复
当然我的意思不是WCF不能绑定IIS上用。这个要看做什么样的应用
烈火蜓蜻 2010-11-10
  • 打赏
  • 举报
回复
哪有人用WCF用来绑在IIS上使用的,

那不是找死吗?每个用户都开一个长连接与IIS连接,那一台服务器,能承受几个这样的连接啊,如果代码写的不好,几百个都顶不住。

要设计前先要考虑清楚。
zengjiaqin 2010-11-10
  • 打赏
  • 举报
回复
帮顶
Harrison_2009 2010-11-10
  • 打赏
  • 举报
回复
標記學習~
每天回帖即可獲得10分可用分!
三岁、就很帅 2010-11-10
  • 打赏
  • 举报
回复
whrspsoft3723 2010-11-10
  • 打赏
  • 举报
回复
在iis中把线程池的数量调为1,即时释放。
ycg_893 2010-11-09
  • 打赏
  • 举报
回复
刚刚又阻塞了,已确定不是DB问题。客户端获取服务器异常时超时。(即无结果)
ycg_893 2010-11-09
  • 打赏
  • 举报
回复
会不会是WCF阻塞WEB服务呢?这两个各不相干呀!
cczdp 2010-11-09
  • 打赏
  • 举报
回复
试为汝析之:
1. 阻塞时数据库连接会有几十个,说明连接没有被释放,此为问题之根本。
2.为何没被释放?用户的事务没有结束,或服务接口调用没有结束导致。
3.为何没有结束调用?服务异常、数据库锁为大部分因素。
4.如何定位是服务异常还是数据库锁?先查数据库,数据库隔离级别,如果是serilizble,很有可能是锁,用profiler查看是否有数据库锁(具体方法上网搜搜),如没有,则进一步看看数据库中的sql语句是什么,判断是哪些服务在运行中,找出问题的服务方法,进而找出问题。
经验之谈,望对汝有所帮助。
jiewei915 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 qq234121906 的回复:]
做个标记,值的一看。
[/Quote]

对,美是内在的
夜雨悠扬 2010-11-09
  • 打赏
  • 举报
回复
WebService中有对象没有释放干净,检查代码中是否存在。
客户端的WebServece对象没有放开也可能造成这个现象。
javaliuyong 2010-11-09
  • 打赏
  • 举报
回复
不错 哦

加载更多回复(17)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧