2012-12-09 138 views
0

我需要一些帮助,解决一段时间以来在工作中遇到困扰的问题。asp.net HTTP处理程序

基本我正在使用一个写入VB.net的HTTP处理程序,它似乎不时会出现一些奇怪的行为。以下是我看到错误的一段代码示例。我已经简化了变量,因为他们中的一些持有公司数据

Public Class wmf 
Implements IHttpHandler, IRequiresSessionState 

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable 
    Get 
     ' Return false in case your Managed Handler cannot be reused for another request. 
     ' Usually this would be false in case you have some state information preserved per request. 
     Return True 
    End Get 
End Property 

Private EmployeeID As string 
Private Category As string 


Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 

'' handles user session and writes to database using the private variables above. 

End Sub 

这主要是伪代码(因此你可以忽略最佳做法),但如果从时间到时间似乎还是会出现,我已经有问题当从会话数据填充(或任何可能与每个实例不同的数据)时,此类中的私有变量就像共享(静态)变量一样。

做你们任何人都可以看到把这样的私有变量放在一个HTTP处理程序中会有多个用户遇到并发问题的问题吗?

我已经有一个基本的记录器这个类显示一个变量保留从一个用户谁击中该网站的价值,并创建了这个类的一个实例。这是可能的方式,它的设置或我想像这一点?

感谢任何见解

回答

3

我的猜测是,IsReusable返回true会导致你的问题。它会导致值被保留,因为该对象被重用于多个请求。

+0

我同意。 'IsReusable'属性就是将对象的一个​​实例视为可以跨会话共享的属性。由于它是共享的,因此在处理多个请求时存在争用条件。 – Rob

+1

非常好的一点,我没有考虑到这一点。 – jdross