16 Stimmen

Aufrufen einer Webseite von c# in Code

Ich brauche eine Möglichkeit, eine Webseite aus meiner .net-Anwendung heraus aufzurufen.

Aber ich möchte nur eine Anfrage an die Seite senden und mich nicht um die Antwort kümmern.

Da es manchmal vorkommt, dass die Antwort eine Weile dauert, möchte ich nicht, dass die Anwendung hängen bleibt.

Ich habe versucht, in Seite das page_load Ereignis

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

Obwohl es auf Async eingestellt ist, scheint es immer noch zu hängen, da die Seite nicht fertig gerendert, bis die Threads beendet haben

15voto

ckramer Punkte 9351

Das sollte für Sie funktionieren:

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

Die Klasse WebClient verfügt über Ereignisse, die den Aufrufer benachrichtigen, wenn die Anfrage abgeschlossen ist, aber da Sie sich nicht darum kümmern, sollte es nichts weiter dazu geben.

14voto

TheAlbear Punkte 5385

Doak, war fast da, aber jedes Mal, wenn ich eine der Anfragen in einen separaten Thread gestellt habe, wurde die Seite immer noch nicht gerendert, bis alle Threads gelaufen waren.

Die beste Methode, die ich gefunden habe, war die Anpassung der Doak-Methode und das Einfügen einer Zeitüberschreitung und das Schlucken des Fehlers.

Ich weiß, es ist ein Hack, aber es funktioniert :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!!
}

10voto

Patrick Desjardins Punkte 130529

Damit Ihre Anwendung nicht hängen bleibt, müssen Sie die Methode von einem Thread aus aufrufen.

Für die HTTP-Anfrage ohne Antwort sollte so etwas genügen:

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();
}

7voto

Joel Coehoorn Punkte 377088

Blick auf System.Net.WebClient verwenden Sie insbesondere die DownloadDataAsync() Methode, um die Anfrage zu senden, ohne den Rest der Anwendung zu blockieren.

3voto

Chris Marisic Punkte 31583

Um diesen Prozess zu haben, ohne den Seitenfluss der aktuellen Seite zu unterbrechen, würde ich empfehlen, einen WCF-Dienst zu erstellen, der den Code für Sie ausführt. Stellen Sie den Dienst so ein, dass er 1-Wege-Aufrufe verwendet und initiieren Sie auf der Seite einen Ajax-Aufruf an den Dienst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X