Le code n'est pas complet (il ne se construit pas), car je ne suis pas en mesure d'obtenir le "item" dans la ligne suivante dans le WriteResponseData().WebRequest - Récupération asynchrone des données pour plusieurs requêtes
HttpWebResponse WebResp = (HttpWebResponse)item.EndGetResponse(result);
Il me manque quelque chose. S'il vous plaît signaler.
ci-dessous est le code complet: -
static string[] imageUris =
{ "http://www.cricinfo.com/db/PICTURES/CMS/118200/118217.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/117500/117599.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/117500/117598.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106400/106412.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106400/106411.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106200/106275.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106300/106362.2.jpg"
};
static void Main(string[] args)
{
SendAsynchronousRequests();
Console.WriteLine("All the files have been requested and retrieved...");
Console.ReadLine();
}
static void SendAsynchronousRequests()
{
WebRequest[] requests = InitializeWebRequests();
foreach (var item in requests)
{
Console.WriteLine("Trying to retrieve :-" + item.RequestUri.OriginalString);
item.BeginGetResponse
(
WriteResponseData,
);
}
}
static WebRequest[] InitializeWebRequests()
{
WebRequest[] requests = new WebRequest[imageUris.Length];
int temp = 0;
foreach (var item in imageUris)
{
requests[temp] = WebRequest.Create(item);
//requests[temp].Method = "GET";
temp++;
}
return requests;
}
static void WriteResponseData(IAsyncResult result)
{
HttpWebResponse WebResp = (HttpWebResponse)item.EndGetResponse(result);
Console.WriteLine("WebResp.StatusCode :-" + WebResp.StatusCode);
Console.WriteLine("WebResp.Server :- " + WebResp.Server);
Console.WriteLine("WebResp.ContentLength :- " + WebResp.ContentLength.ToString());
Console.WriteLine(Environment.NewLine);
}
EDIT
Ainsi, le code modifié pour la méthode (qui compilerait) serait suit: -
WebRequest request = (WebRequest)result.AsyncState;
if (result != null && result.IsCompleted)
{
HttpWebResponse WebResp = (HttpWebResponse)request.EndGetResponse(result);
Console.WriteLine("WebResp.StatusCode :-" + WebResp.StatusCode);
Console.WriteLine("WebResp.Server :- " + WebResp.Server);
Console.WriteLine("WebResp.ContentLength :- " + WebResp.ContentLength.ToString());
Console.WriteLine(Environment.NewLine);
}
Il me donne l'erreur d'exécution suivante: -
Object reference not set to an instance of an object. at WebRequestUsingAPM.Program.WriteResponseData(IAsyncResult result) in \WebRequestUsingAPM\Program.cs:line 73 at System.Net.LazyAsyncResult.Complete(IntPtr userToken) at System.Net.ContextAwareResult.CompleteCallback(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Net.ContextAwareResult.Complete(IntPtr userToken) at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) at System.Net.HttpWebRequest.ProcessResponse()
EDIT: - Je comprends. result.AsyncState renvoie null parce que je passe null lorsque j'appelle BeginGetResponse(), le second argument est AsyncState et je passe null là. Je devrais passer l'objet WebRequest actuel là et cela ferait l'affaire.
Ainsi, au lieu de ce qui suit: -
item.BeginGetResponse
(
WriteResponseData, null
);
je passerais l'article: -
item.BeginGetResponse
(
WriteResponseData, item
);
Il donne une erreur d'exécution. J'ai mis à jour ma question. –
Je comprends. result.AsyncState renvoie null parce que je passe null lorsque j'appelle BeginGetResponse(), le second argument est AsyncState et je passe null là. Je devrais passer l'objet WebRequest actuel là et cela ferait l'affaire. Merci. –