2014-01-16 40 views
1

當使用ServerXMLHTTP對象發送HTTPS「GET」請求時,我有一個涉及「超時」的問題。使用默認超時在少於2秒內ServerXMLHTTP超時

爲了欺騙對象發送帶有登錄用戶的標識和密碼的請求,我將其設置爲使用虛擬代理,然後排除URL(在Intranet上)的域。所以變量url_to_get包含.mydomain.com,而代理地址實際上是「not.used.com」。

// JScript source code 
HTTP_RequestObject = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0"); 

// Using logged in username authentication 
HTTP_RequestObject.open("GET", url_to_get, false); 
HTTP_RequestObject.setProxy(2, "not.used.com", "*.mydomain.com"); 

try 
{ 
    HTTP_RequestObject.send(); 
} 
catch (e) 
{ 
} 

在catch塊中,我記錄了「(0x80072EE2)操作超時的異常」。在打開之前,在日誌消息之後的1到2秒內打上時間戳。

重試將按預期工作,並且可以一遍又一遍地重複。這是服務器端的東西嗎?或者它是代理的結果?

回答

0

好吧,這是痛苦和尷尬。我找出了我在超時時看到的問題的根源。我將超時設置爲比默認設置小3個數量級的「默認設置」。所以即使當我將它們增加到我認爲是非常大的值時,我仍然比默認值短。

我已經瀏覽了Microsoft page describing the setTimouts() method上的字眼,並誤解了參數的時基。我假設了秒,而實際上它是毫秒。

在調試此問題的過程中,我使用替代COM對象「WinHttp.WinHttpRequest.5.1」複製了代碼,並且在驗證等效API SetTimeouts()時發現了失誤。我在過程中學到了一些東西,所以都沒有丟失,「WinHttp.WinHttpRequest.5.1」有一個SetAutoLogonPolicy()[3]方法,可以讓我跳過「代理」愚蠢的「 Msxml2.ServerXMLHTTP.6.0「強制它將用戶的憑據發送到內部網服務器。我也與Fiddler一起弄亂了[4],並且學會了足夠危險!

希望別人能從我的錯誤中吸取教訓,並發現這對將來調試自己的問題非常有用。

下面是一些行內鏈接,因爲我沒有足夠的代表處發佈超過兩個:

[3]:msdn.microsoft.com/en-us/library/windows/desktop/aa384050%28v = vs.85%29.aspx

[4]:fiddler2.com

0

Msxml2.ServerXMLHTTP.6.0可以通過代理使用。我花了一段時間,但堅持不懈。我在微軟的建議下從WinHttp.WinHttpRequest.5.1轉到Msxml2.ServerXMLHTTP.6.0

哪裏varHTTP是你的對象引用Msxml2.ServerXMLHTTP.6.0可以使用

varHTTP.setproxy 2, ProxyServerName, "BypassList" 

希望這有助於你與Msxml2.ServerXMLHTTP.6.0開始追求。