Silverlight Windows Phone 7上的多个连续HttpWebRequest

Silverlight Windows Phone 7上的多个连续HttpWebRequest,silverlight,windows-phone-7,httpwebrequest,Silverlight,Windows Phone 7,Httpwebrequest,我试图在WP7中生成多个连续的HttpWebRequest。每一个都使用前一个的信息(来自cookie的ID、重定向的URL位置、一些HTML…),因此我们需要“等待”直到前一个完成后才能继续。 在Android中,我们创建了一个新线程,然后依次使用多个同步HttpPost或HttpGet,但这里的情况有所不同,因为Silverlight的异步特性 我现在拥有的是我的助手类(在UI线程上实例化): getCookieStatus: private void getCookiesStatu

我试图在WP7中生成多个连续的HttpWebRequest。每一个都使用前一个的信息(来自cookie的ID、重定向的URL位置、一些HTML…),因此我们需要“等待”直到前一个完成后才能继续。 在Android中,我们创建了一个新线程,然后依次使用多个同步HttpPost或HttpGet,但这里的情况有所不同,因为Silverlight的异步特性

我现在拥有的是我的助手类(在UI线程上实例化):

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"];

        }
    }
使用我们得到的“位置”字符串来发出另一个连续的http请求而不将调用从一个函数链接到另一个函数,最好的方法是什么?有没有办法在IAsyncResult之后在UI线程中引发一个“waker”(事件?)呢?

是visual studio的一项新功能,它为这种类型的异步顺序工作流提供了一些很好的语法支持。不幸的是,它还不适合生产代码,因为它仍然是一个技术预览

在此之前,您必须要么链接回调(对于2或3个操作来说并不可怕,但除此之外:意大利面),要么使用类似于用迭代器和生成器实现的调用


编辑:@AnthonyWJones在上面的评论中使用生成器链接到另一个协同程序实现。

我很好奇,你有理由相信HTTP堆栈不会自动跟随302响应吗?顺便说一句,对于排序HttpWebRequest的一般解决方案,请参见:这只是一个简化的示例。在该位置URL中,我获得了一个SessionID的值,该值在进入下一个页面时传递,该页面有一个登录表单,我不需要通过302直接登录。异步ctp的问题是,对于Silverlight WP7,它使用了一些XNA DLL==市场验证失败:
    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"];

        }
    }