我遇到了一個以前的應用程序不工作在WP8上,WP7上完美工作的問題。HttpWebRequest BeginGetResponse回調沒有射擊WP8(在WP7上工作)
這是我使用的http請求的代碼:
public void SendMessage()
{
request = WebRequest.Create(uri) as HttpWebRequest;
request.Method = "POST";
request.AllowReadStreamBuffering = true;
request.ContentType = "application/octet-stream";
try
{
// get device info
String deviceInfo = String.Format("platform,{0};os,{1};width,{2};height,{3};dpi,{4};",
Config.PLATFORM_NAME,
Environment.OSVersion.Version.ToString(),
System.Windows.Application.Current.Host.Content.ActualWidth.ToString(),
System.Windows.Application.Current.Host.Content.ActualHeight.ToString(),
96);
request.Headers["X_MX_DEVICE_INFO"] = deviceInfo;
}
catch (Exception) {}
request.BeginGetRequestStream(new AsyncCallback(ProcessRequestStream), null);
}
private void ProcessRequestStream(IAsyncResult asyncResult)
{
if (!message.IsCancelled())
{
try
{
using (Stream stream = request.EndGetRequestStream(asyncResult))
{
message.GetRequest(stream);
}
request.BeginGetResponse(new AsyncCallback(ProcessResponseStream), null);
}
catch (Exception e)
{
syncContext.Post(OnEnd, e);
}
}
else
{
syncContext.Post(OnEnd, null);
}
}
private void ProcessResponseStream(IAsyncResult asyncResult)
{
if (!message.IsCancelled())
{
try
{
response = (HttpWebResponse)request.EndGetResponse(asyncResult);
if (HttpStatusCode.OK != response.StatusCode)
{
throw new Exception("http status error: " + response.ToString());
}
syncContext.Post(SetResponse, response);
}
catch (Exception e)
{
syncContext.Post(OnEnd, e);
}
}
else
{
syncContext.Post(OnEnd, null);
}
}
private void SetResponse(object state)
{
Exception ex = null;
try
{
using (Stream stream = ((HttpWebResponse)state).GetResponseStream())
{
message.SetRespone(stream);
}
}
catch (Exception e)
{
ex = e;
}
syncContext.Post(OnEnd, ex);
}
private void OnEnd(object state)
{
message.OnEnd((Exception)state);
}
}
看起來好像BeginGetResponse的回調不會被解僱。我已經嘗試過Fiddler,看看回來會有什麼反應,而且看起來好像什麼都沒有回來,但只是WP8。
任何可能的原因呢?
嘗試var result = request.GetResponse()來確保,如果使用模擬器,還可以從提琴手中追蹤它。 – 2013-03-27 14:28:17
不幸的是,我對提琴手的瞭解很低,因爲這是他第一次需要它。當使用WP8仿真器時,沒有日誌返回fiddler,在WP7仿真器上,我可以像預期的那樣看到fiddler中的響應。 var request = ..似乎沒有幫助的問題.. – 2013-03-27 14:41:07
好的。如果你編碼服務器端,你跟蹤你的查詢真正到達服務器端。我看到你發佈的應用程序/八位字節流,不知道,但你不使用JSON?或者這樣的REST服務。如果你有訪問權限,你可以調試服務器端嗎? – 2013-03-27 14:47:44