2012-12-27 165 views
4

這是我的ASP代碼如何設置http超時使用asp?

<% 
http = server.createobject("microsoft.xmlhttp") 
http.open "post", servleturl, false 
http.setrequestheader "content-type", "application/x-www-form-urlencoded" 
http.setrequestheader "accept-encoding", "gzip, deflate" 
http.send "request=" & sxml 
http_response = http.responsetext 
%> 

我需要在超時時的反應沒有在15秒內怎麼來的?

回答

6

使用waitForResponse方法ServerXMLHTTP實例.Send調用後是一種正確的方式,我建議。
也要使用.WaitForResponse,需要通過設置True方法的第三個參數進行異步調用。

Const WAIT_TIMEOUT = 15 
Dim http 
Set http = Server.CreateObject("MSXML2.ServerXMLHTTP") 
    http.open "POST", servleturl, True 'async request 
    http.setrequestheader "content-type", "application/x-www-form-urlencoded" 
    http.setrequestheader "accept-encoding", "gzip, deflate" 
    http.send "request=" & sxml 
    If http.waitForResponse(WAIT_TIMEOUT) Then 'response ready 
     http_response = http.responseText 
    Else 'wait timeout exceeded 
     'Handling timeout etc 
     'http_response = "TIMEOUT" 
    End If 
Set http = Nothing 
9

您也可以將通過調用 「下一個定時器,」 像這樣使用同步請求:

<% 
Dim http 

Set http = Server.CreateObject("MSXML2.ServerXMLHTTP") 
http.SetTimeouts 600000, 600000, 15000, 15000 
http.Open "post", servleturl, false 
http.SetRequestHeader "content-type", "application/x-www-form-urlencoded" 
http.SetRequestHeader "accept-encoding", "gzip, deflate" 
http.Send "request=" & sxml 

http_response = http.responsetext 
%> 

在這裏看到docs

的參數是:

setTimeouts (long resolveTimeout, long connectTimeout, long sendTimeout, long receiveTimeout) 

的一個定時器方法應該打開的方法之前被調用。沒有任何參數是可選的。

+0

'microsoft.xmlhttp'是一個獨立於版本的ProgID,它對應於'XMLHTTP',它沒有'Timeouts'方法。 而是使用'ServerXMLHTTP'實例。請參閱http://support.microsoft.com/kb/290761/en-us以獲取ServerXMLHTTP和XMLHTTP之間的區別,特別是在ASP應用程序中。 重點在於OP需要15秒的超時時間。由於您的代碼,操作可能會超過15秒。這不是一個異步請求順便說一句。 –

+0

@ Kul-Tigin,你是對的。我更改爲SYNCHRONOUS,這是OP想要的,並將發送/接收超時更改爲15秒。 – gpinkas