【问题标题】:Confused Requests between Classic ASP + .NET Application经典 ASP + .NET 应用程序之间的混淆请求
【发布时间】:2012-01-10 06:17:35
【问题描述】:

我在维护一个 Classic ASP 应用程序时遇到问题(架构师早已不在)。每个客户站点都会获得一个与其数据库名称相对应的虚拟目录 - 例如,http://www.site.com/Foo 将是客户 Foo 的站点,并且他们的数据库也将命名为 Foo。 1:1映射,非常清晰。

假设还有http://www.site.com/Bar。在至少中等负载下,我偶尔会遇到的错误是对 /Bar 的 POST 请求正在保存在 /Foo 数据库中。

这里值得注意的是,保存操作被替换为使用 Server.CreateObject 调用实例化的 .NET 组件。这个 .NET 类实例使用

System.EnterpriseServices.ContextUtil.GetNamedProperty("Request");
获取当前请求的句柄。 .NET 代码根据此请求构造有关保存操作的所有内容。

我的工作理论是,不知何故,System.EnterpriseServices.ContextUtil 和创建 .NET 组件的 .asp 页面对当前请求的内容有不同的看法。这可能吗?我似乎认为请求是一次处理一个,但我似乎无法找到明确的答案。

我已尝试将所有虚拟目录放入一个应用程序池中,并且每个客户都有自己的 - 无论哪种方式都会出现问题。

我唯一的另一个想法是,数据库连接池项目以某种方式被错误地重用,但是数据库连接是使用数据库名称创建的 连接字符串,所以我觉得这不太可能。

服务器运行 IIS 6,数据库服务器是 SQL Server 2000。升级计划已经在进行中。

【问题讨论】:

    标签: com asp-classic iis-6 .net-2.0 database-connection


    【解决方案1】:

    我认为答案应该在 Request 对象本身的某个地方。或者 .NET 代码中是否可能存在基本上默认为 Foo 的 Case/If ?例如,是否有任何代码对所有可能从网络服务器的根目录运行的应用程序通用......或者至少认为它是从那里运行的?

    我认为您确实需要举一个例子来说明何时有所不同并进行一些比较。我的猜测是,这个问题不那么“不稳定”,而是更系统化……关键是找到场景并从那里着手。但是,如果我们没有掌握确切的实例,就很难就这样的事情给出具体的建议。

    【讨论】:

    • 感谢您的回复-我应该提到问题的描述是一个非常简化的版本,实际上有几个站点遇到了问题。
    【解决方案2】:

    这似乎是一个数据库连接池问题。

    我们发现这个错误,一行数据进入错误的数据库,只会在一种情况下发生:

    • 站点 Foo 正在循环,在经典 asp 中执行许多插入
    • 站点栏正在.NET 中保存一条记录

    当这些请求相隔几毫秒时,我们就会看到错误。

    我们重构了代码以减少每个循环执行的插入次数,这大大减少了此错误的发生次数,尽管我们仍然很少看到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 2018-01-23
      • 2010-11-09
      • 1970-01-01
      相关资源
      最近更新 更多