我想通過驗證服務器上的用戶名/密碼來驗證我的WP7應用中的用戶。以某種方式返回來自HTTPWebRequest的響應?
在我的「驗證用戶」方法中,我創建了一個HTTPWebRequest和我需要驗證的東西。
然後據我所見,唯一的選擇是使用request.BeginGetResponse和異步回調。
但是我想以與創建請求的方法相同的方式返回請求中的響應,我該如何實現?
我想通過驗證服務器上的用戶名/密碼來驗證我的WP7應用中的用戶。以某種方式返回來自HTTPWebRequest的響應?
在我的「驗證用戶」方法中,我創建了一個HTTPWebRequest和我需要驗證的東西。
然後據我所見,唯一的選擇是使用request.BeginGetResponse和異步回調。
但是我想以與創建請求的方法相同的方式返回請求中的響應,我該如何實現?
BeginGetResponse
返回一個IAsyncResult
,它有一個等待處理,當請求完成時發出信號。所有你需要做的就是等待這個句柄:無法在WP7工作]
更新:使用ManualResetEvent
var mre = new ManualResetEvent(false);
var iar = myHttpWebRequest.BeginGetResponse(state => mre.Set(), null);
mre.WaitOne();
var response = myHttpWebRequest.EndGetResponse(iar);
我不知道爲什麼你想使它返回調用方法。我只想用標準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
}
我要調用的方法?在驗證用戶。但是,所有的HTTP邏輯should'nt被放置在UI層我的UI層,看起來不好,所以我怎麼能在它傳遞從我的「服務」類的UI層和行爲的價值? –
唯一真正的方式來實現,你需要將異步調用完成時在工人類來創建一個事件,並觸發該事件是什麼,所以(僞代碼)...
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,在那裏你會找到一些工作樣本。
這是有點超出我的聯盟,代碼經驗/知識vise害怕,但噸儘管如此。 –
這是一個恥辱 - 這幾乎是唯一可靠的方式來獲得你所需要的。 – ZombieSheep
據我已經能夠閱讀,現在已經測試,WP7上不支持AsyncWaitHandle:( 它引發NotSupportedException。 –
如果你只是刪除等待和調用EndGetResponse會發生什麼?它應該塊,直到響應可用 –
然後響應將是無效 –