很多Web应用程序的一个典型需要是实现某种类型的页面点击计数,或者应用访问计数。在常规的.aspx页面中实现这一要求相当简单。而对于Web服务的方案也是相当简单,只要多考虑一点东西。
在为你的应用程序收集性能信息和使用量度的时候,分析实现两个不同的Web服务计数器的代码可能比较有用。
HttpApplicationState是一个内建于.NET Framework中的类,它对于一个应用程序中所有被调用的请求处理函数可用。默认情况下,所有的Web服务可以访问HttpApplicationState对象,因为它们都继承自System.Web.Services.WebService。
在使用一个应用程序的Application状态变量时,有几点需要考虑。
1. 内存使用:不要在Application对象中存储大量数据,因为存储于其中的对象的长时间存在会降低服务器的内存性能。
2. 同步:由Application对象使用的内建Collection对象不是线程安全的。因此可能有多个线程同时访问或操作Application对象中的数据。
3. 生命周期:记住Application对象的值只随应用程序的生存而生存,任何时候的升级、维护等操作都可能会启动或关闭应用程序。
4. 多服务器环境:应用程序状态并不在多个服务器间共享。如果你的应用程序运行在一个服务器场(server farm)环境,Application状态对象只反映应用程序所在的特定服务器的使用情况。
还有一点,在任何环境下使用Application或Session对象不是一种好的做法。对于这两个对象的使用有很多争论。在实现Application对象之前,你应该考虑所有的风险因素。
下面我们看一段跟踪两种Application计数器的代码。一个计数器作为全局计数器,跟踪任何Web服务被调用的总次数。第二个跟踪器针对单一的Web服务,用于跟踪一个特定的Web服务被调用的次数。
代码1.0是Web服务的代码,包括两个计数器的代码,外加一些用来增加计数器的值的简单的测试方法。