Несколько последовательных запросов HttpWebRequest на Windows Phone 7 - PullRequest
2 голосов
/ 21 октября 2011

Я пытаюсь сделать несколько последовательных HttpWebRequest в WP7. Каждый из них использует информацию (идентификатор из файла cookie, адрес URL для перенаправления, немного HTML ...) из предыдущего, поэтому нам нужно «дождаться», пока предыдущий не закончится, прежде чем продолжить. В Android мы создаем новый поток, а затем вы идете последовательно с несколькими Synchronous HttpPost или HttpGet, но здесь это отличается из-за асинхронной природы Silverlight.

Что у меня сейчас есть, так это в моем классе помощника (создан в потоке пользовательского интерфейса):

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(theUrl);
        request.Method = "POST";

        try
        {
            IAsyncResult ias = request.BeginGetResponse(new AsyncCallback(getCookiesStatus), request);

        }
        catch (Exception e)
        {
            Console.Write("ERROR" + e.Message);
        }

getCookieStatus:

    private void getCookiesStatus(IAsyncResult result)
    {
        HttpWebRequest request = (HttpWebRequest)result.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
        ccCookies = response.Cookies;
        HttpStatusCode sc = response.StatusCode;

        if (sc == HttpStatusCode.Found)
        {
            location = response.Headers["Location"];

        }
    }

Как лучше всего использовать эту строку "location", которую мы получили, чтобы сделать еще один последовательный http-запрос без цепочки вызовов от функции к функции? Есть ли какой-нибудь способ поднять "waker" (событие?) В потоке пользовательского интерфейса после IAsyncResult?

1 Ответ

1 голос
/ 22 октября 2011

async ctp - это новая визуальная студийная функция, которая обеспечивает отличный синтаксический сахар именно для этого типа асинхронного последовательного рабочего процесса. К сожалению, он пока не подходит для производственного кода, так как это все еще предварительный просмотр технологии.

До этого вам придется либо цеплять обратные вызовы (не страшно для 2 или 3 операций, но помимо этого: спагетти), либо использовать что-то вроде шаблона сопрограммы , реализованного с помощью итераторов и генераторов.

Редактировать: @AnthonyWJones связан с другой реализацией сопрограммы с использованием генератора в комментариях выше.

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