다시 PCL (Portable Class Library)의 WebRequest에 문제가 있습니다.WP8의 HttpWebRequest.BeginGetResponse
나는이 코드 조각이 : 이제
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 높은
- 윈도우 스토어는
- 는 .NET 4.5
나는이 문제를 어떻게 해결할 수 있을까? 상호 호환성을 보장하기 위해 PCL이 사용되지 않았습니까?
SideNote : 'request.GetResponseAsync()'와 같은 TPL (async/await)을 사용하지 않는 이유는 무엇입니까? 코드가 더 간단하고 유지하기 쉽습니다. –
TPL 익숙해지기까지 조금 시간이 걸리지 만 –
을 좋아하지만 SL4, WP7.1, WP8 및 Windows Store를 대상으로하는 휴대용 클래스 라이브러리에서 어떻게 사용합니까? –