Asp.net 多用户同时访问Web服务
我们有一个在ASP.NET 2.0 Web服务(VB)中创建的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
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”的不同实例。一旦知道是哪一个,就可以通过代码进行调试,找出调用它们的原因。