2013-07-24 110 views
1

要抓住一个html页面我已经使用了下面的一段时间没有问题。我现在得到I/O 1784错误,无论何时需要网站很长时间(1分钟以上)来为页面提供服务。我猜测真正的错误是我的程序超时。我将如何延长那段时间?InternetReadFile超时?

function GetInternetFile(const fileURL, FileName: string): boolean; 
const 
    BufferSize = 1024; 
    var 
    hSession, hURL: HInternet; 
    Buffer: array[1..BufferSize] of Byte; 
    BufferLen: DWORD; 
    f: file; 
    sAppName: string; 
begin 
    sAppName := ExtractFileName(Application.ExeName); 
    hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, 
    nil, 0); 
    try 
    Screen.Cursor := crHourGlass; 
    hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0); 
    try 
     AssignFile(f, FileName); 
     Rewrite(f, 1); 
     i := 0; 
     repeat 
     InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); 
     BlockWrite(f, Buffer, BufferLen); 
     until BufferLen = 0; 
     CloseFile(f); 
     result := True; 
    finally 
     InternetCloseHandle(hURL) 
    end 
    finally 
    InternetCloseHandle(hSession); 
    Screen.Cursor := crDefault; 
    end 
end; 

回答

1

尝试调用InternetSetOption();以下是我们如何在冗长的SOAP调用之前设置发送和接收超时:

var 
    TimeOut: Integer; 
begin 
    TimeOut := (NumSecs * 1000); 
    InternetSetOption(Data, INTERNET_OPTION_RECEIVE_TIMEOUT, 
        Pointer(@TimeOut),  SizeOf(TimeOut)); 
    InternetSetOption(Data, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@TimeOut), 
        SizeOf(TimeOut)); 
+0

感谢Chris。我不知道TimeOut是以1/1000秒来衡量的。 – bobonwhidbey