PCL (Portable Class Library) の WebRequest でまた問題が発生しました。
私はこのコードを持っています:
static ManualResetEvent allDone = new ManualResetEvent(false);
static string doc;
static public void AddAnime(string encodedLogin, string id, int episodes, int status, int score)
{
if (string.IsNullOrEmpty(encodedLogin))
{
throw new ArgumentException();
}
else
{
doc = String.Format("anime_id={0}&status={1}&episodes={2}&score={3}", id, "watching", episodes, score);
HttpWebRequest request = HttpWebRequest.CreateHttp("http://mal-api.com/animelist/anime");
request.Method = "POST";
request.Headers["Authorization"] = encodedLogin;
request.BeginGetRequestStream(new AsyncCallback(GetRequestCallBack), request);
allDone.WaitOne();
s.ToString();
}
}
static private void GetRequestCallBack(IAsyncResult aResult)
{
HttpWebRequest request = (HttpWebRequest)aResult.AsyncState;
Stream postStream = request.EndGetRequestStream(aResult);
byte[] byteArray = Encoding.UTF8.GetBytes(doc);
postStream.Write(byteArray, 0, doc.Length);
postStream.Flush();
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
static private void GetResponseCallback(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
Stream dataStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(dataStream);
string responseString = streamReader.ReadToEnd();
//Do something with string here
allDone.Set();
}
さて、問題は、AddAnime
サンプルのコンソール アプリを呼び出すと問題なく動作するのに、WP8 デバイスまたはエミュレーター (WXGA) から呼び出すとBeginGetResponse
. まったく入力GetResponseCallback
されず (ブレークポイントでテスト済み)、直後のコードも続行されませんBeginGetResponse
。私は 2 分以上待っていましTimeOutException
た。
私は以下でテストしました:
- コンソールアプリ (作品)
- WP8 WXGA エミュレーター (動作しません)
- WP8 デバイスが接続されています (動作しません)
- WP8 デバイスが切断されました (動作しません)
私のPCLでは、次をターゲットにしています。
- SL4以上
- WP7以降
- Windows ストア
- .NET 4.5
どうすればこれを解決できますか?相互互換性を保証するために PCL が使用されていませんか?