【问题标题】:asp.net HTTP Handlerasp.net HTTP 处理程序
【发布时间】:2012-12-09 21:18:13
【问题描述】:

我需要一些帮助来解决一个困扰我一段时间的工作应用程序问题。

基本我正在使用一个用 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 处理程序中会受到多个用户并发问题的影响?

我实际上已经让这个类与一个基本的记录器显示一个变量,保留来自访问该站点并创建该类实例的用户的值。这可能与它的设置方式还是我想象的那样?

感谢您的任何见解

【问题讨论】:

    标签: asp.net vb.net oop class httphandler


    【解决方案1】:

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

    【讨论】:

    • 我同意。 'IsReusable' 属性本质上将对象的实例视为可以跨会话共享。由于它是共享的,因此在处理多个请求时存在竞争条件。
    猜你喜欢
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多