Вызов веб-страницы С# в коде

Мне нужен способ вызова веб-страницы из моего приложения .net.

Но я просто хочу отправить запрос на страницу и не беспокоиться об ответе.

Как бы то ни было, когда ответ может занять некоторое время, поэтому я не хочу, чтобы он повесил приложение.

Я пытался в стороне событие page_load

WebClient webC = new WebClient();
Uri newUri = new Uri("http://localhost:49268/dosomething.aspx");
webC.UploadStringAsync(newUri, string.Empty);

Несмотря на то, что он настроен на Async, он все равно задерживается, пока страница не закончит рендеринг, пока потоки не будут завершены.

Ответ 1

Doak, был почти там, но каждый раз, когда я помещал любой запрос в поток sepreate, страница все равно не отображалась, пока все потоки не закончили работать.

Лучший способ, который я нашел, - это настроить Doak-метод и просто придерживаться тайм-аута там и усвоить ошибку.

Я знаю его взломать, но он работает: P

WebRequest wr = WebRequest.Create("http://localhost:49268/dostuff.aspx");
wr.Timeout = 3500;

try
{
    HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
}
catch (Exception ex)
{
    //We know its going to fail but that dosent matter!!
}

Ответ 2

Это должно сработать для вас:

System.Net.WebClient client = new System.Net.WebClient();
client.DownloadDataAsync(new Uri("http://some.url.com/some/resource.html"));

В классе WebClient есть события для уведомления вызывающего абонента, когда запрос завершен, но поскольку вам все равно, не должно быть ничего другого.

Ответ 3

Если у вас нет приложения для зависания, вам нужно будет вызвать метод из потока.

Для запроса HTTP без ответа, что-то вроде этого должно выполнить задание:

Thread myThread = new Thread(new ThreadStart(myMethodThatDoHttp));
    myThread.Start();
public void myMethodThatDoHttp()
{
    HttpWebRequest request  = (HttpWebRequest)WebRequest.Create("http://www..com");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
}

Ответ 4

Посмотрите System.Net.WebClient, в частности используйте DownloadDataAsync() для отправки запроса без блокировки остальной части приложения.

Ответ 5

Чтобы этот процесс не прерывал поток страниц вашей текущей страницы, я бы рекомендовал создать службу WCF, которая будет выполнять код для вас. Попросите службу установить односторонние вызовы и на странице инициировать вызов Ajax в службу.

Ответ 6

Используйте System.Net.WebClient.DownloadDataAsync/DownloadFileAsync в сочетании с DownloadDataCompleted/DownloadFileCompleted.

Ответ 7

  • Насколько я могу видеть метод BeginGetResponse и метод EndGetResponse объекта HttpWebRequest (полученный через вызов WebRequest.Create), соответственно. методы BeginGetRequestStream-/EndGetRequestStream, ЗДЕСЬ пока не отражены, - хотя они EXLPLICITLY отмечены для "асинхронного запроса" в документах:

    Нет подсказки, как это работает.

  • Если страница для вызова находится в том же IIS/App. как вызов, вы можете написать фильтр, который завершает всю услугу для этого запроса клиенту (ваш "вызов" aspx-страницы), если в строке карты содержится спецификация для вызываемой страницы (в ISAPI-cpp: "return SF_STATUS_REQ_FINISHED;" ) Но, возможно, ваш asp/x/- script -execution на вызываемой странице также убит. Вопрос проверки.

  • Рассмотрите возможность использования директив include на стороне сервера (менее условных) или динамически вызывать файл .asp с помощью Server.Execute.

  • Не очень асинхронный, но, возможно, достойный: явно указывать EARLY Response.End() (или аналогичный) на странице CALLED PAGE для системы, что НЕТ ДАЛЬНЕЙШИХ ОТВЕТОВ следует ожидать, главным образом НЕ к вызывающему, Затем делайте свой материал в сценариях CALLED. По крайней мере, временной сдвиг, ожидающий завершения синхронизации, может быть сведен к минимуму с помощью параметра 10, 100 или около того.