2016-04-01 14 views
3

Ich möchte, dass meine Website eine URL aufruft, und das war's. Ich brauche es nicht, um auf eine Antwort zu warten. Mein ASP.Net-Projekt verwendete zuvor webRequest.BeginGetResponse (null, requestState), hat jedoch kürzlich nicht mehr funktioniert. Es werden keine Fehler ausgelöst, aber ich habe bestätigt, dass die URL nie aufgerufen wird.C# Machen Sie einen asynchronen HTTP-Anruf

Wenn ich webRequest.GetResponse() verwenden wird die URL zwar aufgerufen, aber dieser Ansatz ist nicht asynchron, was ich brauche.

Hier ist mein Code, irgendwelche Ideen, was könnte falsch sein?

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url)); 
webRequest.Method = "GET"; 
NetworkCredential nc = new NetworkCredential("theUsername", "thePassword"); 
webRequest.Credentials = nc; 
webRequest.PreAuthenticate = true; 
RequestState rs = new RequestState(); 
rs.Request = webRequest; 
IAsyncResult r = (IAsyncResult)webRequest.BeginGetResponse(null, rs); 

Dies ist der Code, der aber nicht asynchron arbeitet ..

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url)); 
webRequest.Method = "GET"; 
NetworkCredential nc = new NetworkCredential("theUsername", "thePassword"); 
webRequest.Credentials = nc; 
webRequest.PreAuthenticate = true;    
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); 

Antwort

4

BeginGetResponse funktionieren sollte. Ich vermute jedoch, dass Ihr Programm beendet wird, bevor die Anfrage tatsächlich gesendet wird.

Was Sie tatsächlich tun müssen, ist auf die Antwort warten und damit umgehen. Dazu müssen Sie einen Rückruf haben.

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url)); 
webRequest.Method = "GET"; 
NetworkCredential nc = new NetworkCredential("theUsername", "thePassword"); 
webRequest.Credentials = nc; 
webRequest.PreAuthenticate = true; 
RequestState rs = new RequestState(); 
rs.Request = webRequest; 
WebResponse response; 
IAsyncResult r = (IAsyncResult)webRequest.BeginGetResponse(x => response = webRequest.EndGetResponse(x), rs); 
Thread.Sleep(10000); 

Aber SIE SOLLTEN DAS APM-MODELL NICHT MEHR BENUTZEN !!!

Sie sollten Async/erwarten verwenden.

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url)); 
webRequest.Method = "GET"; 
NetworkCredential nc = new NetworkCredential("theUsername", "thePassword"); 
webRequest.Credentials = nc; 
webRequest.PreAuthenticate = true; 
RequestState rs = new RequestState(); 
rs.Request = webRequest; 
WebResponse response = await webRequest.GetResponseAsync(); 

Sie sind auch eine Reihe von using/.Dispose() Methoden fehlt.

+0

danke! das hat funktioniert – AndeeC

Verwandte Themen