Asp.net 多用户同时访问Web服务

Asp.net 多用户同时访问Web服务,asp.net,vb.net,web-services,Asp.net,Vb.net,Web Services,我们有一个在ASP.NET 2.0 Web服务(VB)中创建的WebMethod,在整个应用程序中访问它非常频繁。WebMethod将查询作为参数获取,并返回数据集。当用户数为1或2时,它可以正常工作。如果大约30个用户同时使用系统,则WebMethod将返回不同查询的数据集。我们在C#中尝试了synclock(lock)选项,但它不起作用 Public Function ExecuteQry(ByVal StrText As String) As DataSet Dim Ad

我们有一个在ASP.NET 2.0 Web服务(VB)中创建的
WebMethod
,在整个应用程序中访问它非常频繁。
WebMethod
将查询作为参数获取,并返回
数据集
。当用户数为1或2时,它可以正常工作。如果大约30个用户同时使用系统,
WebMethod
将返回不同查询的
数据集
。我们在C#中尝试了
synclock
lock
)选项,但它不起作用

Public Function ExecuteQry(ByVal StrText As String) As DataSet

        Dim AdoDs As New DataSet()
        Dim SqlDp As New SqlDataAdapter
        Dim SqlCmd As New SqlCommand
        Dim SqlParam As New SqlParameter

        Try
            SyncLock AdoDs
                MakeConnect()
                With SqlCmd
                    .Connection = SqlCon
                    .CommandText = "rExecuteQry"
                    .CommandType = CommandType.StoredProcedure
                End With
                SqlParam = SqlCmd.Parameters.AddWithValue("@strText", Trim(StrText))
                SqlDp.SelectCommand = SqlCmd
                SqlDp.Fill(AdoDs)
                DisposeConnect()
                Return AdoDs
            End SyncLock
        Catch ex As SqlException
            DisposeConnect()
            Debug.Write(ex.Message)
        Finally

            SqlCmd = Nothing
            SqlParam = Nothing
        End Try
    End Function
以下是存储过程:

ALTER PROCEDURE [dbo].[rExecuteQry] 
@strText   Varchar (max)
as
Exec( @StrText)

源添加到问题…请同时发布存储过程。从存储过程中,Exec(@StrText)正在运行请求的查询。这是从ExecuteQry(ByVal StrText作为字符串)传入和修剪的。我只能猜测,您有调用ExecuteQry的进程传入不同的StrText,这导致了您的不同查询!这是由于您的Trim函数导致的,并且您的查询在\before\before(但这不太可能)。我个人会将日志记录到您的方法中,以查看使用不同的存储过程字符串调用ExecuteQry的内容。我认为这是一个非常危险的模式…我们正在进行软件维护,这是大约6年前写的。我们如何克服这个问题……您需要找到调用了哪些不同的过程,即“StrText”的不同实例。一旦知道是哪一个,就可以通过代码进行调试,找出调用它们的原因。