【问题标题】:WebService Calls Database TwiceWebService 两次调用数据库
【发布时间】:2013-09-30 17:17:47
【问题描述】:

我有一个非常简单的 Web 服务函数,它从数据库中提取数据并将其返回给用户。但是我最近发现(通过登录数据库端)调用正在执行两次。我已将其范围缩小到导致问题的 Web 服务……如果我通过 localhost 上的浏览​​器打开该服务,然后直接执行它,SQL 日志显示它已在大约 1/100 秒内运行了两次。

我将包含我的代码作为指导。内置VS2008。

<WebMethod()> _
Public Function MY_DATABASE_QUERY() As DataSet
    Dim DS As New DataSet
    Dim DA As New SqlDataAdapter
    Dim Cmd As New SqlCommand
    With Cmd
        .Connection = Connection()
        .CommandType = CommandType.StoredProcedure
        .CommandText = "SOME_STORED_PROCEDURE"
        .Connection.Open()
        .ExecuteReader()
        .Connection.Close()
        DA.SelectCommand = Cmd
        DA.Fill(DS)
    End With
    Return DS
End Function

Connection() 函数只是从 web.config 中提取加密的连接字符串,解密它,然后返回对象:

Public Function Connection() As SqlConnection
    Dim R As New Rijndael
    Return New SqlConnection(R.DecryptString128Bit(System.Configuration.ConfigurationManager.ConnectionStrings("ConnString").ToString, "S0ME_HA$H_C0D3"))
End Function

...基本上就是这样。它尽可能简单。

考虑到这一点,有没有人知道它为什么会这样,以及我将来如何防止这种情况发生?对于这个查询来说这没什么大不了的,但如果它在(例如)购买或付款时执行它可能是一个非常大的问题。

【问题讨论】:

  • 您是否检查过您的服务是否被调用了两次?例如,通过设置一些日志记录?
  • 我的第一个想法是它被调用它的网页调用了两次,我在这个方向上浪费了大量时间进行故障排除。但是,如果您从等式中删除调用网页并手动调用 web 服务(通过 web 浏览到 localhost/address/to/MyWebService.asmx),它仍然显示它正在执行两次。

标签: .net sql sql-server web-services


【解决方案1】:

发生这种情况是因为您在填充 DataSet 之前调用了Cmd.ExecuteReader()。删除此呼叫。试试这个:

    Dim DS As New DataSet
    Dim DA As New SqlDataAdapter
    Dim Cmd As New SqlCommand
    With Cmd
        .Connection = Connection()
        .CommandType = CommandType.StoredProcedure
        .CommandText = "SOME_STORED_PROCEDURE"
        .Connection.Open()
        DA.SelectCommand = Cmd
        DA.Fill(DS)
        .Connection.Close()
    End With
    Return DS

【讨论】:

  • 很好,我什至没有意识到这一点。
  • 您,先生,是一位圣人和学者。这完美地解决了这个问题。现在我只需要遍历我的其余代码并修复任何其他类似的实例。谢谢!
  • @DonQuixote,请看这里how to mark an answer
【解决方案2】:

在准备 SQLCommand 时尝试删除 .ExecuteReader()。当您调用数据适配器的 Fill 方法时,它会再次执行该命令。

【讨论】:

    猜你喜欢
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多