我的通用应用程序项目(通用Windows 8.1)存在问题。我想下载一个字符串然后反序列化到类。但我鼓励在Windows手机上下载此字符串时遇到问题。我有一个单独的lib。我只有httpclient下载字符串然后反序列化为类。一切正常(测试是绿色的),但当我把它插入windows phone app项目。它看起来像是在库代码中,但不会下载任何东西.. 我移动代码将字符串下载到Windows Phone解决方案,以检查它为什么不起作用。但是现在我不断得到这样的例外:
System.Exception: Exception from HRESULT: 0x80072F30
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at ProjectName.Mobile.MainPage.<InitComboBoxes>d__10.MoveNext()
这是我的代码:
private HttpClient client;
private CancellationTokenSource cts;
private HttpBaseProtocolFilter filter;
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
filter = new HttpBaseProtocolFilter();
client = new HttpClient(filter);
cts = new CancellationTokenSource();
await InitComboBoxes();
}
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
filter?.Dispose();
client?.Dispose();
cts?.Dispose();
}
private async Task InitComboBoxes()
{
try
{
var response = await client.GetAsync(new Uri(@"http://planer.info.pl/api/rest/places.json")).AsTask(cts.Token);
var t = await response.Content.ReadAsStringAsync().AsTask(cts.Token);
}
catch (Exception e)
{
var msg = new MessageDialog("Please check Your internet connection!" + e.Message);
await msg.ShowAsync();
}
}
现在我不知道如何解决这个问题。如果有人能帮助我,我将非常感激!
答案 0 :(得分:1)
看看你的代码,我没有看到任何特别的错误(我没有测试过);不同的是:
HttpResponseMessage
为IDisposable
,因此您也应该考虑对其进行处理。但是,这只是一些批评:P
根据MSDN查看异常,问题是您无法连接到服务器。
ERROR_WINHTTP_NO_CM_CONNECTION
0x80072F30
连接服务器时出现问题。
有很多方法可以解决这个问题:
使用手机时,请确保手机上的时间设置正确(我已经看到这会导致很多问题)
我不确定你的意思,但是如果你的意思是它进入但没有返回,那么我怀疑是一个线程deadlock。
希望这有帮助。
答案 1 :(得分:0)
如果您只想从网址获取数据,请尝试使用此代码。除非有理由这不符合您的需求吗?
public async Task<string> GetData()
{
using (var client = new HttpClient())
{
try
{
HttpResponseMessage responseMessage = client.GetAsync("http://planer.info.pl/api/rest/places.json").Result;
if (responseMessage.IsSuccessStatusCode)
return await responseMessage.Content.ReadAsStringAsync();
}
catch (Exception e)
{
}
}
return null;
}
String response = await GetData();