2013-09-12 4 views
0

В C# мне нужно быстро протестировать URL-адрес, не дожидаясь полного ответа. Есть ли способ просто отказаться, если есть ответ или какой-то другой способ быстро проверить URL?Тестовый URL-адрес быстро, не используя GetResponse()

Я извлекаю большое количество данных с веб-сайта и просто должен убедиться, что он существует заранее.

Это то, что я сейчас:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(arg.Sources[i]); 
try 
{ 
    request.GetResponse(); 
} 
catch (Exception ex) 
{        
     CMD("HTML Connection Fail"); 
     return false; 
} 
CMD("Connection Successful"); 

Ожидание ответа занимает много времени, хотя так есть то, что я могу заменить его?

Так есть ли другой способ протестировать URL-соединение, не дожидаясь полного ответа с сервера?

Сайт изменение returnall ложь, если вы не хотите, чтобы ваш браузер, возможно, аварии: «www.odata.charities.govt.nz/GrpOrgLatestReturns?$filter=RegistrationStatus%20eq%20%27Registered%27 & $ returnall = true & $ format = csv% 22 "

ответ

0

Вы можете использовать метод BeginGetResponse по запросу, который немедленно возвращается без блокировки потока вызывающего абонента. Вам нужно будет предоставить функцию обратного вызова, которая будет вызываться, как только клиент получит ответ от сервера. Но, конечно, этот обратный вызов будет вызываться в другом потоке позже фактического вызова метода BeginGetResponse. Внутри этого обратного вызова вы можете поместить свою инструкцию tr/catch и проанализировать фактический ответ с сервера, если вам нужно.

2

Вы можете использовать request.Method = "HEAD", если вам не нужно получать содержание и проверить правильность URL. Однако это может не работать с некоторыми серверами.

+0

Я продолжаю получать ошибку «501 Not Implemented». Руководитель сайта «» означает, что его пустым является то, что вызывает ошибку? – user1938919

1

Попробуйте изменить метод на HEAD. Сервер должен возвращать только заголовки без тела, поэтому он должен быстро возвращаться.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(arg.Sources[i]); 
try 
{ 
    request.Method = "HEAD"; 
    request.GetResponse(); 
} 
catch (Exception ex) 
{        
    CMD("HTML Connection Fail"); 
    return false; 
} 
CMD("Connection Successful"); 
1

Будет ли отображаться URL-адрес для вас? Ознакомьтесь с классом Ping: http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx

Ping pingSender = new Ping(); 
PingReply reply = pingSender.Send ("www.contoso.com"); 

if (reply.Status == IPStatus.Success) 
{ 
    // Looks good 
} 
else 
{ 
    // Doesn't exist or is down 
} 
+0

Ping говорит мне, что следующий веб-сайт не существует, который доверяет мне id: «http://www.odata.charities.govt.nz/GrpOrgLatestReturns?$filter=RegistrationStatus%20eq%20%27Registered%27&$returnall=true&$ = формат CSV» – user1938919

Смежные вопросы