以某种方式从HTTPWebRequest返回响应?

时间:2012-01-20 09:25:02

标签: windows-phone-7 asynchronous httpwebrequest

我正在尝试通过验证服务器上的用户名/传递来验证我的WP7应用中的用户。

在我的“验证用户”方法中,我创建了一个HTTPWebRequest,其中包含我需要验证的内容。

然后据我所知,执行的唯一选择是使用request.BeginGetResponse和异步回调。

但是我想以与我创建请求相同的方法返回请求中的响应,我该如何实现?

3 个答案:

答案 0 :(得分:0)

BeginGetResponse返回IAsyncResult,其中有一个等待句柄,在请求完成时发出信号。你所要做的就是等待这个句柄:[在WP7上不起作用]


更新:使用ManualResetEvent

var mre = new ManualResetEvent( false );

var iar = myHttpWebRequest.BeginGetResponse( state => mre.Set(), null );

mre.WaitOne();

var response = myHttpWebRequest.EndGetResponse( iar );

答案 1 :(得分:0)

我不确定你为什么要在调用方法中返回它。我只会使用下面的标准WebClient行为:

public void ValidateUser()
{
    WebClient webClient = new WebClient();

    Uri uri = new Uri(url);
    webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
    webClient.DownloadStringAsync(new Uri(url));
}

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    //Validate result from response by using e.Result
}

答案 2 :(得分:0)

实现所需内容的唯一真正方法是在工作类中创建一个事件,并在异步调用完成时触发该事件,因此(伪代码)......

void StartDownload(object[] parameters)
{
    var req = HttpWebRequest.Create("http://google.com");
    req.BeginGetRequestStream(Completed_handler, req);
}

void Completed_handler(object sender, DownloadStringCompletedEventArgs e)
{
    var request = (HttpWebRequest)result.AsyncState;
    var response = request.EndGetResponse(result);

    using (var stream = response.GetResponseStream())
    using (var reader = new StreamReader(stream))
    {
        var contents = reader.ReadToEnd();
        NotifyCallerOfContent(contents)
    }
}

public event EventHandler<MyCustomEventArgsClass> DownloadHasFinished;

public NotifyCallerOfDownload(string content)
{
    if(null != DownloadHasFinished)
    {
        DownloadHasFinished(this, new MyCustomEventArgsClass(content));
    }
}

然后订阅您的调用类中的DownloadHasFinished事件。

至于通过HttpWebRequest专门调用,请查看this question,在那里你会找到一些工作样本。