我正在尝试通过验证服务器上的用户名/传递来验证我的WP7应用中的用户。
在我的“验证用户”方法中,我创建了一个HTTPWebRequest,其中包含我需要验证的内容。
然后据我所知,执行的唯一选择是使用request.BeginGetResponse和异步回调。
但是我想以与我创建请求相同的方法返回请求中的响应,我该如何实现?
答案 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,在那里你会找到一些工作样本。