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

2voto

baretta Punkte 7117

Utilice System.Net.WebClient.DownloadDataAsync/DownloadFileAsync in Verbindung mit DownloadDataCompleted/DownloadFileCompleted .

2voto

dos Punkte 71
  1. Soweit ich sehen kann, sind die 'BeginGetResponse'-Methode und die 'EndGetResponse'-Methode des HttpWebRequest-Objekts (gewonnen durch den Aufruf von WebRequest.Create), bzw. die BeginGetRequestStream-/EndGetRequestStream-Methoden, HIER noch nicht reflektiert, - obwohl sie in den Docs EXPLICITLY für einen "async request" gekennzeichnet sind:

    Ich habe keine Ahnung, wie das funktioniert.

  2. Wenn die aufzurufende Seite auf dem gleichen IIS/App. wie die aufrufende Seite ist, könnten Sie einen Filter schreiben, der alle Dienste für diese Anfrage an den Client (Ihre 'aufrufende' aspx-Seite) beendet, wenn der map-string die Spezifikation für die aufzurufende Seite enthält (in ISAPI-cpp: "return SF_STATUS_REQ_FINISHED;") Aber vielleicht wird Ihre asp/x/-script-Ausführung in der aufgerufenen Seite auch beendet. Frage der Überprüfung.

  3. Erwägen Sie die Verwendung von serverseitigen Include-Direktiven (weniger konditionierbar) oder rufen Sie eine .asp-Datei dynamisch auf, indem Sie Server.Execute verwenden.

  4. Nicht wirklich asynchron, aber vielleicht wertvoll: Erklären Sie explizit durch eine EARLY Response.End() (oder ähnlich) IN DER AUFGERUFENEN SEITE dem System, dass KEINE WEITERE ANTWORT zu erwarten ist, vor allem NICHT an den Aufrufer. Dann machen Sie Ihre Sachen weiter in den Skripten der AUFGERUFENEN Seite. Zumindest die Zeitspanne, in der das Ende des Sync-Aufrufs abgewartet werden muss, könnte so um den Faktor 10, 100 oder so minimiert werden.

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