【问题标题】:Scalability issues when we are calling web services written in .NET using asp/vbscript当我们使用 .NET 调用使用 asp/vbscript 编写的 Web 服务时的可伸缩性问题
【发布时间】:2009-04-29 22:16:07
【问题描述】:

我们目前正在使用 asp/vbscript 通过我们的 Web 服务器调用我们的应用程序服务器上的 Web 服务。这在低负载期间非常有效。然而,在高负载期间,有时可能需要长达 25 秒才能执行如下查询:

Public Function GetValidLogon(storeKey, username)
    Dim req
    Set req = CreateObject("Microsoft.XMLHTTP")

    Dim soapReq
    soapReq = "<?xml version=""1.0"" encoding=""utf-8""?> " + _
                "<soap:Envelope " + _
                    "xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" " + _
                    "xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " + _
                    "xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> " + _
                    "<soap:Body> " + _
                        "<GetValidLogon xmlns=""" + namespace + """> " + _ 
                            "<storeKey>" + _
                                CStr(storeKey) + _
                            "</storeKey>" + _
                            "<username>" + _
                                CStr(username) + _
                            "</username>" + _
                        "</GetValidLogon> " + _
                    "</soap:Body> " + _
                "</soap:Envelope>"

    req.open "POST", Me.serviceAddress, False
    req.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
    req.setRequestHeader "SOAPAction", Me.serviceNamespace + "GetValidLogon"
    req.send soapReq

    Set GetValidLogon = SOAPResponseTo_GetValidLogonOutput(req.responseText)
End Function

您认为可能是什么问题?是我们用来调用 Web 服务的代码(见上文)还是只是我们使用 vbscript/asp 来调用 Web 服务的事实?会不会是 IIS 中的一些设置...?

而且每次,即使在高负载期间,当我们直接在应用程序服务器上执行 Web 服务时也总是很快。

【问题讨论】:

    标签: web-services asp-classic vbscript


    【解决方案1】:

    永远不要使用

    CreateObject("Microsoft.XMLHTTP")
    

    在服务器端应用程序中......使用

    CreateObject("MSXML2.ServerXMLHTTP")
    

    改为。

    【讨论】:

      【解决方案2】:

      我很想知道服务器/代码/IIS 是否将自身限制为仅与 Web 服务建立 N 个并发连接。这将导致其他请求排队并阻塞,直到其他请求完成。

      【讨论】:

      • 如果是这种情况,我该如何调查?因为我之前也考虑过——所有请求都会在一段时间后排队,使服务变慢。但我真的不知道如何监控或调查是否是这种情况。
      • 每次启动或关闭时都有 yoru 服务日志。或者使用 WCF E2E 跟踪,用 SDK 中的 svctraceviewer.exe 查看。
      • @aktersnurr,我不太确定如何使用 ASP/VBS 或 IIS 跟踪这种想法。您可以尝试使用 WireShark 之类的工具监控流量,并查看您在任何给定时间建立了多少出站连接。
      • 我查看了wireshark,但我真的不知道如何监控出站连接。
      【解决方案3】:

      用户凭据存储在后端的什么位置 - 在您的应用程序、数据库或 Active Directory 中?也许问题不在于您的应用,而在于您与 AD 的连接。

      【讨论】:

        【解决方案4】:

        在负载测试期间,性能问题是否也出现在您的开发环境中?

        如果是这样,那么我建议您通过将上述代码放入测试 ASP 页面来创建一个测试脚本。让页面接受两个查询字符串参数,“n”和“m”。连续循环“n”次,每次调用之间有“m”毫秒的延迟,然后看看会发生什么。甚至可以看到当您从多个请求调用同一页面时会发生什么。

        从那里,您可以继续检查应用程序服务器上 IIS 的性能计数器,注意您是否正在断开连接以及连接等待的时间。

        如有必要,您可以继续分析 Web 服务。见Profiler Tools for .NET。问题可能在任何地方,甚至在数据库中,这些工具将帮助您缩小范围。

        【讨论】:

        • 我应该寻找哪些性能计数器?问题不在任何地方。因为正如我在问题中所写,当我直接从应用程序服务器执行服务时,服务总是执行得很快。
        猜你喜欢
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        相关资源
        最近更新 更多