#c# #winforms #httpwebrequest #httpwebresponse
#c# #winforms #httpwebrequest #httpwebresponse
Вопрос:
У меня проблема в том, что при загрузке данных отображается ошибка «Время ожидания операции истекло».
Что я могу сделать, чтобы устранить эту ошибку? Я использую Win forms (C #) вот мой код, пожалуйста, проверьте его и дайте предложения. Где я должен изменить код, пожалуйста, помогите мне…
public void ProcessData()
{
try
{
string MessageTitle = "";
int pages = Convert.ToInt32(txtPages.Text);
for (int k = Count; k <= pages; k )
{
string url = "http://www.yellowpages.com/" StateName.ToLower() "/" CategoryName "?g=" StateName "amp;page=" k "amp;q=" CategoryName "";//txtYP.Text k;
System.Net.HttpWebRequest httpRequest;
System.Net.HttpWebResponse httpResponse;
System.IO.StreamReader SReader;
string html;
httpRequest = (System.Net.HttpWebRequest)(System.Net.HttpWebRequest.Create(url));
httpRequest.Method = "GET";
httpResponse = (System.Net.HttpWebResponse)(httpRequest.GetResponse());
SReader = new StreamReader(httpResponse.GetResponseStream());
html = SReader.ReadToEnd();
string strDummy = html;
httpResponse.Close();
Ответ №1:
Сколько времени пройдет до истечения времени ожидания запроса? Можете ли вы перейти по URL-адресу из веб-браузера?
Установите HttpWebRequest.ReadWriteTimeout
свойству HttpWebRequest значение, намного превышающее текущее. Значение по умолчанию равно 5 минутам. Не уверен, почему это должно занять более 5 минут.
Вместо блокировки getresponse вы могли бы также использовать асинхронные обратные вызовы ( BeginGetResponse
/ EndGetResponse
).
Редактировать
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.HttpListener">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Cache">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="System.Net"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.log"
traceOutputOptions = "ProcessId, DateTime"
/>
</sharedListeners>
<switches>
<add name="System.Net"
value="Verbose" />
<add name="System.Net.Sockets"
value="Verbose" />
<add name="System.Net.Cache"
value="Verbose" />
<add name="System.Net.HttpListener"
value="Verbose" />
</switches>
</system.diagnostics>
Добавьте этот раздел внутрь configuration
раздела в app.config вашего приложения.
После добавления вышеуказанного перестройте решение и запустите его.
Посмотрите на трассировку.зарегистрируйте запись в каталоге bin вашего приложения для получения более подробной информации.
Комментарии:
1. Спасибо за ответ,,, да, я могу перейти по URL-адресу из веб-браузера… как установить время Httprequest, пожалуйста, помогите мне …. где я могу написать код…
2. почему отображается эта ошибка «Запрос был прерван: соединение было неожиданно закрыто».
3. Мне кажется, вы забиваете запросами сайт, которым вы не владеете, и блокируетесь их контрмерами firewall bot.
4. Не уверен, какова точная причина сбоя. Вам нужно посмотреть трассировку стека. Посмотрите в разделе «РЕДАКТИРОВАТЬ» в моем ответе, как включить трассировку.
5. Привет, Виджай Сингари ….. на самом деле я использую winforms.so отсутствует файл app.config….
Ответ №2:
добавьте это в свой код :
HttpRequest.Время ожидания = 3600000;
это увеличит время ожидания запроса до одного часа.
Комментарии:
1. Привет, спасибо, что предоставили отсрочку … на самом деле мы не знаем, сколько времени это займет, это может быть 5 или 7 часов…..
2. тогда отложите это на 10 часов, некоторые программы имеют почти 24 часа в качестве тайм-аута для своих запросов. итак, это хорошо протестировано.
Ответ №3:
Я сталкиваюсь с такой же проблемой при выполнении моего консольного приложения на сервере. Приведенное ниже решение работает для меня :
Снимите флажок со скрипта автоматической настройки в разделе Настройки локальной сети в internet option и проверьте настройки автоматического обнаружения. Это решает мою проблему с ошибкой тайм-аута операции.