分享
 
 
 

为ServerXMLHTTP对象的HTTP请求设置超时时间

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

为ServerXMLHTTP对象的HTTP请求设置超时时间

Article last modified on 2002-3-2

----------------------------------------------------------------

The information in this article applies to:

- Microsoft XML 3.0

----------------------------------------------------------------

如果用ServerXMLHTTP(SXH)对象向另一个ASP页面或者Internet资源发起HTTP请求,建议设置一下超时限制。

既可以异步提交这种HTTP请求,也可以通过同步操作时调用setTimeouts方法做到这一点。

setTimeouts的各项参数为:

HRESULT setTimeouts (long resolveTimeout, long connectTimeout,

long sendTimeout, long receiveTimeout)

这些参数分别指定了解析DNS名字、建立socket连接、发送Request Data和接收Response Data的超时时间。

如果不指定超时,那么假如客户端同步发送数据给服务器,而服务器却挂起了这个请求,这样,要么客户端等待5分钟后发生send超时,要么等待一小时后发生receive超时。在这段时间内,客户端表现为Hang。

经常会被问的一个问题是,我如何把这种超时失败同其他错误区分开来?

是这个样子,如果有一个时间超时的错误发生,就会引发一个COM异常:

0x80072ee2 "The operation timed out"

附录A中给出一个简单的VB DEMO。如果服务器的RS.asp中执行一句话:Sleep(15000),肯定会send超时,于是异常就被捕获到了。这时的对话框如下所示:

-2147012894就是0x80072EE2的错误。

SXH的open方法其实并不作任何network I/O,它只是初始化一下SXH对象的一些内部状态。所有“Real”的工作是在send方法中作的(如果这次的请求是同步的),setTimeouts中设置的超时值也将应用在这里。

send方法解析DNS名字,同服务器建立连接,发送request,等待reponse和读response data入内存。每个超时可能会被应用好多次。比如,如果response较大,SXH将需要调用多次Winsock receive来load response,这时receive超时将被应用到每一个Winsock receive调用上。

附录A:

#If Win32 Then

Declare Function GetTickCount Lib "kernel32" () As Long

#Else

Declare Function GetTickCount Lib "User" () As Long

#End If

Private Sub Command1_Click()

On Error Resume Next

Dim objClient As MSXML2.ServerXMLHTTP

Dim lngStartTime As Long

Dim lngFinnishTime As Long

Dim lngOpenTime As Long

Dim lngSendTime As Long

Dim lngRespTime As Long

Dim strMessage As String

Set objClient = New MSXML2.ServerXMLHTTP

txtOpen.Text = ""

txtSend.Text = ""

txtResponse.Text = ""

objClient.setTimeouts 650, 650, 650, 650

lngStartTime = GetTickCount()

objClient.open "GET", "http://localhost:80/asp/rs.asp", False

' no failure here - the operation succeeds in 0 ms

lngFinnishTime = GetTickCount()

lngOpenTime = lngFinnishTime - lngStartTime

strMessage = CStr(lngOpenTime)

If Err.Number <> 0 Then

strMessage = strMessage & ": " & Err.Description

Err.Clear

End If

txtOpen.Text = strMessage

lngStartTime = GetTickCount()

objClient.send ' this is the operation that times out.

lngFinnishTime = GetTickCount()

lngSendTime = lngFinnishTime - lngStartTime

strMessage = CStr(lngSendTime)

If Err.Number <> 0 Then

strMessage = strMessage & ":ErrNumber-" & _

Err.Number & "|ErrDescription-" & Err.Description

Err.Clear

End If

txtSend.Text = strMessage

' this value is set to 672ms appended to a timeout error message

' example: "672: The operation timed out"

Dim respDom As MSXML2.DOMDocument

lngStartTime = GetTickCount()

Set respDom = objClient.responseXML

' no failure here - the operation succeeds in 0 ms

lngFinnishTime = GetTickCount()

lngRespTime = lngFinnishTime - lngStartTime

strMessage = CStr(lngRespTime)

If Err.Number <> 0 Then

strMessage = strMessage & ": " & Err.Description

Err.Clear

End If

txtResponse.Text = strMessage

Set objClient = Nothing

Exit Sub

ERR_HANDLER:

MsgBox Err.Description

End Sub

附录B:

下面我们给出常见的SXH对象的错误码及其解释:

0x80004005 Unspecified error

0x8000FFFF Unexpected error

0x80070008 Out of memory

0x8007000E Out of memory

0x80072ee1 Cannot create any more ServerXMLHTTP objects (cannot exceed 5460 concurrent objects per process)

0x80072ee2 The operation timed out

0x80072ee4 internal error

0x80072ee5 The URL is invalid

0x80072ee7 The server name or address could not be resolved

0x80072eee incorrect password

0x80072eef authentication failure (credentials not accepted)

0x80072efd A connection with the server could not be established

0x80072efe connection aborted

0x80072eff connection reset

0x80072f05 The date in the certificate is invalid or has expired

0x80072f06 The host name in the certificate is invalid or does not match

0x80072f07 A redirect request will change a non-secure to a secure connection

0x80072f08 A redirect request will change a secure to a non-secure connection

0x80072f0c A certificate is required to complete client authentication

0x80072f0d The certificate authority is invalid or incorrect

0x80072f0e Client authentication has not been correctly installed

0x80072f76 The requested header was not found

0x80072f78 The server returned an invalid or unrecognized response

0x80072f7a The request for a HTTP header is invalid

0x80072f7c The HTTP redirect request failed

0x80072f7d An error occurred in the secure channel support

0x80072f80 The HTTP request was not redirected

0x80072f82 A cookie from the server has been declined acceptance

0x80072f88 The HTTP redirect request must be confirmed by the user

0x80072f89 The server certificate was invalid

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有