Joe's Blog

在我的博客中,你会看到一些测试文章和Windows、Linux的使用技巧。有共同兴趣的朋友请关注我的博客。

webservice异步回调,引起数据绑定失败,导致服务器问题。

上周五,经过不懈努力,终于将网站升级上去了。升级完成以后都凌晨四点多了。本以为总可以支持几天没问题吧。没想到今天早上技术总监就来电话说,w3p.exe频繁回收,网站访问很慢。没办法,还是回公司找找原因吧。
回到公司后,和开发经理一起通过单页面压力测试终于发现可能是由于新加的webservice异步回调的方法有问题。经常出现数据绑定失败的错误,差不多3分多钟就会有一次绑定失败。频繁的应用程序出错,极大的占用了服务器资源。
将异步回调的方法改掉后,重新发布,再进行测试。发现没有再发生类似的错误,而且网站的页面访问速度也快了不少。
经过开发经理的分析,引起这次问题的主要原因就是因为异步回调的方法引起的。具体原因还有待我们继续研究。

评论

zbinbo

通过查看相关的参考资料得知。同步和异步的方式有个区别: 主线程和后台线程. 主线程和UI有关,用来刷新页面和绑定数据。而异步调用的是后台线程,它无法刷新页面和数据源。 如果要做到异步绑定的功能的话,得控制线程。

引起我们遇到的上述问题的主要原因在于:

用于应用程序的后台线程并不直接与应用程序 UI 交互,这一点相当关键。如果后台线程试图修改应用程序的 UI 中的控件,该控件就可能会处于一种未知的状态。这可能会在应用程序中引起较大的问题,并难于诊断。例如,当另一个线程正在给动态生成的位图传送新数据时,它或许不能显示。或者,当数据集正在刷新时,绑定到数据集的组件可能会显示冲突信息。

更多的参考可以查看:

http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/SCArchDeGuide/Chapter6UsingMultThr.mspx?mfr=true

# 十一月 5, 2006 10:53 下午