【发布时间】:2010-03-10 17:25:52
【问题描述】:
我正在调用 5 个外部服务器来为我的 IIS 6 服务器上的特定网页的每个请求检索基于 XML 的数据。目前的数量在每秒 3-5 个传入请求之间,这意味着每秒 15-20 个传出请求。
从我的服务器(客户端)到外部服务器(服务器)的传出请求中有 99% 工作正常,但每天约有 100-200 个以“操作已超时”异常结束。
这表明我的服务器上存在资源问题 - 套接字、端口等短缺或线程锁,但这个理论的问题是故障完全是随机的 - 没有连续的请求数量全部失败 - 其中两个外部服务器导致了大部分失败。
我的问题是如何进一步诊断这些异常以确定问题是在我端(客户端)还是在另一端(服务器)?
请求的数量使分析器无法在线上进行 - 捕获这几个异常将非常困难。我在 machine.config 中重置了 CONNECTIONS 和 THREADS,基本代码如下所示:
Dim hRequest As HttpWebRequest
Dim responseTime As String
Dim objWatch As New Stopwatch
Try
' calculate time it takes to process transaction
objWatch.Start()
hRequest = System.Net.WebRequest.Create(url)
' set some defaults
hRequest.Timeout = 5000
hRequest.ReadWriteTimeout = 10000
hRequest.KeepAlive = False ' to prevent open HTTP connection leak
hRequest.SendChunked = False
hRequest.AllowAutoRedirect = True
hRequest.MaximumAutomaticRedirections = 3
hRequest.Accept = "text/xml"
hRequest.Proxy = Nothing 'do not waste time searching for a proxy
hRequest.ServicePoint.Expect100Continue = False
Dim feed As New XDocument()
' use *Using* to auto close connections
Using hResponse As HttpWebResponse = DirectCast(hRequest.GetResponse(), HttpWebResponse)
Using reader As XmlReader = XmlReader.Create(hResponse.GetResponseStream())
feed = XDocument.Load(reader)
reader.Close()
End Using
hResponse.Close()
End Using
objWatch.Stop()
' Work here with returned contents in "feed" document
Return XXX' some results here
Catch ex As Exception
objWatch.Stop()
hRequest.Abort()
Return Nothing
End Try
有什么建议吗?
【问题讨论】:
标签: vb.net httpwebrequest asp.net-3.5 httpexception