О EndGetResponse HttpWebRequest - PullRequest
       4

О EndGetResponse HttpWebRequest

1 голос
/ 13 сентября 2011

Я использую асинхронные вызовы для связи с моим сервером. Я написал некоторый компонент для сбора всех неавторизованных запросов и их повторной отправки после входа пользователя в систему. Я написал тест для создания 10 потоков, которые отправляют некоторые запросы без предварительной авторизации. Затем я жду 20 секунд и делаю авторизацию, а после этого жду успешного завершения запроса. Но проблема возникла в методе EndGetResponse, который я вызываю в своем методе обратного вызова. Я сделал это так:

public void InternalCallback(IAsyncResult result)
{
    try
    {
        RequestState state = (RequestState)result.AsyncState;
        IHttpWebRequest request = state.Request;    

        using (IHttpWebResponse response = responseGetter.GetResponse(request, result))
        {
           // ...
        }
     }
     // ...
}

Итак, я создал некоторый пользовательский класс RequestState, у которого есть несколько обратных вызовов более высокого уровня, которые мне нужны, и у него есть запрос, который я буду использовать для вызова метода EndGetResponse. Но так я получил ошибку:

IAsyncResult object was not returned from the corresponding asynchronous method.

Я изменил это, поэтому теперь у меня есть поле Request в моем классе обратного вызова, которое я установил перед вызовом BeginGetResponse, и я использую это поле Request при вызове EndGetResponse в моем обратном вызове.

public void InternalCallback(IAsyncResult result)
{
    try
    {                                   
        using (IHttpWebResponse response = responseGetter.GetResponse(this.Request, result))
        {
           // ...
        }
     }
     // ...
}

Это новое решение действительно? Можете ли вы предложить это хороший способ сделать это или как я должен это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...