当我们使用asp/vbscript调用.NET编写的web服务时,可伸缩性问题
问题描述:
我们目前通过我们的web服务器使用asp/vbscript在我们的应用服务器上调用web服务。这在低负载情况下运行良好。然而高负荷期间,有时可能需要长达25秒执行一个查询象下面这样:当我们使用asp/vbscript调用.NET编写的web服务时,可伸缩性问题
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 Web服务的事实?它可以在IIS中的一些设置...?
每次,即使在高负载情况下,当我们直接在应用程序服务器上执行Web服务时,它总是很快。
答
在服务器端应用程序不要使用
..使用
CreateObject("MSXML2.ServerXMLHTTP")
代替。
答
我很好奇,看看服务器/代码/ IIS是否限制自己只与N个并发连接到Web服务。这会导致其他请求排队并阻塞,直到其他请求完成。
答
用户凭证存储在后端的哪里? - 在您的应用程序,数据库或Active Directory中?也许问题不在于你的应用程序,而在于你与AD的连接。
答
性能问题在负载测试期间是否也显示在开发环境中?
如果是这样,那么我建议你通过将上面的代码放入测试ASP页面来创建一个测试脚本。让页面接受两个查询字符串参数“n”和“m”。连续循环“n”次,每次调用之间的延迟时间为“m”毫秒,然后查看会发生什么。甚至可以看到当你从多个请求调用同一页面时会发生什么。
从那里,您可以继续检查应用程序服务器上IIS的性能计数器,注意是否丢弃连接以及连接等待的时间。
如有必要,您可能会继续对Web服务进行概要分析。见Profiler Tools for .NET。问题可能在任何地方,甚至在数据库中,这些工具将帮助您缩小范围。
我该如何调查是否属于这种情况?因为我之前也曾考虑过这一点 - 所有请求都会在一段时间后排队等候,从而使服务变得缓慢。但我真的不知道如何监测或调查是否属实。 – Fredrik 2009-04-24 12:52:13
每次启动或关闭时都有yoru服务日志。或者使用WCF E2E跟踪并使用SDK中的svctraceviewer.exe查看它。 – JohnW 2009-04-24 12:56:38