【问题标题】:ASP.NET Web Service + Module + Public variable = thread safe?ASP.NET Web 服务 + 模块 + 公共变量 = 线程安全?
【发布时间】:2025-12-03 11:45:02
【问题描述】:

在我的 ASP.NET Web 服务中,我包含了一个模块,其中它们是公共声明的变量。它们会是线程安全的吗?他们会在同时通话时混淆吗?

这些变量主要是 DatsSet、DataTable 和 SQLDataAdapter..

模块部分代码:


Imports System.Data.OleDb
Imports System.Diagnostics

Module modCommon

    Public bDoLog As Boolean
    Public sCurrentODBC As String
    Public cn As SqlConnection
    Public Query1ds As DataSet
    Public Query1 As DataTable
    Public Query1adapter As SqlDataAdapter

@scripni

谢谢,由于我不熟悉您的建议,我会将所有内容移至本地。

另外,以下变量是否是线程安全的?:


[ToolboxItem(False)]_
Public Class Service1 
     Inherits System.Web.Services.WebService 

     Dim sName As String 
     Dim sCurrentPath As String 

     [WebMethod()]_
     Public Function Capture(ByVal sPath As String) As String 
          sName = "Joe"
     End Function 
End Class 

【问题讨论】:

    标签: asp.net module thread-safety


    【解决方案1】:

    如果您使用的是网络服务而不是使用网络服务,那么当多个服务尝试访问同一个资源时,您将遇到并发问题,而 SqlConnection 绝对是您不希望共享的资源。

    您应该确保不会同时调用属性(例如,通过使用 getter/setter 包装字段并在这些方法中实现锁)或将代码移动到类并在任何时候实例化该类你需要它。

    【讨论】: