私はWP7で複数の連続したHttpWebRequestを作成しようとしています。それぞれは情報(クッキーからのID、リダイレクトのためのURLロケーション、いくつかのHTML ...)を前のものから使用するので、前のものが終了するまで「待つ」必要があります。 Androidでは新しいスレッドを作成し、複数の同期HttpPostまたはHttpGetを使用して順次実行しますが、ここではSilverlightの非同期性のために異なります。Windows Phone 7で複数の連続したHttpWebRequest
私が今持っていることは、これは(UIスレッド上でインスタンス)私のヘルパークラスである:
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"];
}
}
は何」と使用するための最良の方法だろう私たちは、関数から関数への呼び出しを連鎖させずに、別の連続したhttp要求を作成する必要がありますか? IAsyncResultの後にUIスレッドで「waker」(イベント?)を呼び出す方法はありますか?
私は興味がありますが、HTTPスタックが302レスポンスに自動的に従うだけではないと信じる理由がありますか? HttpWebRequestのシーケンシングの一般的な解決方法についてはこちらをご覧ください:http://geekswithblogs.net/codingbloke/archive/2011/09/10/the-asyncoperationservice-and-httpwebrequest.aspx – AnthonyWJones
これは単なる単純な例です。その場所のURLには、GETで渡されたSessionIDの値が次のページに渡されます。このページには、302を経由せずに直接ログインするためのFORMがあります。 – Alejandro