Appeler une page Web à partir de c # dans le code

J’ai besoin d’un moyen d’appeler une page Web depuis l’intérieur de mon application .net.

Mais je veux juste envoyer une demande à la page et ne pas m’inquiéter de la réponse.

Comme il arrive parfois que la réponse prenne un certain temps, je ne veux pas qu’elle soit suspendue.

J’ai essayé côté l’évènement page_load

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

Même s’il est réglé sur Async, il semble toujours suspendu car la page ne finira pas le rendu jusqu’à ce que les threads soient terminés.

Cela devrait fonctionner pour vous:

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

La classe WebClient contient des événements pour notifier l’appelant lorsque la demande est terminée, mais puisque cela ne vous dérange pas, il ne devrait y avoir rien d’autre.

Doak, y était presque, mais chaque fois que je plaçais une demande dans un fil séparé, la page ne restituait toujours pas avant que tout le fil ne soit terminé.

Le meilleur moyen que j’ai trouvé était d’ajuster la méthode de Doak et d’enfoncer une pause et d’avaler l’erreur.

Je sais que c’est un bidouillage mais ça marche: 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!! } 

Pour ne pas avoir votre application à bloquer, vous devrez appeler la méthode depuis un thread.

Pour la requête HTTP sans réponse, quelque chose comme ça devrait faire l’affaire:

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

Regardez System.Net.WebClient , utilisez spécifiquement la méthode DownloadDataAsync() pour envoyer la demande sans bloquer le rest de l’application.

Pour avoir ce processus sans interrompre le stream de page de votre page actuelle, je vous recommande de créer un service WCF qui exécutera le code pour vous. Demandez au service de définir des appels à sens unique et, sur la page, initiez un appel Ajax au service.

  1. Autant que je puisse voir, la méthode ‘BeginGetResponse’ et la méthode ‘EndGetResponse’ de l’object HttpWebRequest (acquis via l’appel de WebRequest.Create), resp. les méthodes BeginGetRequestStream- / EndGetRequestStream, ICI ne sont pas encore reflétées, bien qu’elles soient EXCLUSIVEMENT marquées pour une “demande async” dans la documentation:

    • Pour .Net 2.0
    • Pour .Net 4.0

    Pas la moindre idée, comment ça marche.

  2. Si la page à appeler est sur le même IIS / App. en tant qu’appelant, vous pouvez écrire un filtre qui met fin à tous les services de cette demande au client (votre page “appelante” aspx), si la chaîne-map contient la spécification de la page à appeler (dans ISAPI-cpp: “return SF_STATUS_REQ_FINISHED; “) Mais peut-être que votre exécution asp / x / -script dans la page appelée est également supprimée. Question de chèque.

  3. Pensez à utiliser des directives d’inclusion côté serveur (moins conditionnable) ou à appeler dynamicment un fichier .asp à l’aide de Server.Execute.

  4. Pas vraiment asynchrone, mais peut-être utile: indiquez-le explicitement par une réponse précoce. Une fin () (ou similaire) dans la page appelée au système, vous vous attendez à ce qu’aucune autre réponse ne soit attendue, principalement PAS à l’appelant. Faites ensuite votre travail dans les scripts de la page CALLED. Au moins, le laps de temps attendu pour attendre la fin de l’appel de synchronisation pourrait être réduit au minimum de 10, 100 ou plus.

Utilisez System.Net.WebClient.DownloadDataAsync/DownloadFileAsync en conjonction avec DownloadDataCompleted/DownloadFileCompleted .