Я уже некоторое время борется, но я просто не могу получить эту работу. Я пытаюсь загрузить json-строку в мое приложение Windows Phone 8, используя «вид» async ждут.Cant получить Async (async wait) загрузить JSON для работы
Я использую the promising solution of Matthias Shapiro.
HttpExtensions.cs
public static class HttpExtensions
{
public static Task<Stream> GetRequestStreamAsync(this HttpWebRequest request)
{
var taskComplete = new TaskCompletionSource<Stream>();
request.BeginGetRequestStream(ar =>
{
Stream requestStream = request.EndGetRequestStream(ar);
taskComplete.TrySetResult(requestStream);
}, request);
return taskComplete.Task;
}
public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request)
{
var taskComplete = new TaskCompletionSource<HttpWebResponse>();
request.BeginGetResponse(asyncResponse =>
{
try
{
HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
HttpWebResponse someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
taskComplete.TrySetResult(someResponse);
}
catch (WebException webExc)
{
HttpWebResponse failedResponse = (HttpWebResponse)webExc.Response;
taskComplete.TrySetResult(failedResponse);
}
}, request);
return taskComplete.Task;
}
}
public static class HttpMethod
{
public static string Head { get { return "HEAD"; } }
public static string Post { get { return "POST"; } }
public static string Put { get { return "PUT"; } }
public static string Get { get { return "GET"; } }
public static string Delete { get { return "DELETE"; } }
public static string Trace { get { return "TRACE"; } }
public static string Options { get { return "OPTIONS"; } }
public static string Connect { get { return "CONNECT"; } }
public static string Patch { get { return "PATCH"; } }
}
И Мои MainPageViewModel.cs
protected override void OnActivate()
{
base.OnActivate();
GetSessions();
}
private async void GetSessions()
{
var result = await GetMyData("http://localhost/api/MyData");
}
public async Task<string> GetMyData(string urlToCall)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlToCall);
request.Method = HttpMethod.Get;
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
using (var sr = new StreamReader(response.GetResponseStream()))
{
return sr.ReadToEnd();
}
}
После того, как он попадает в "HttpWebResponse someResponse = (HttpWebResponse) responseRequest.EndGetResponse (asyncResponse)", я получаю a WebException:
«System.Net.WebException: удаленный сервер возвратил ошибку: NotFound»
Когда я погружаюсь немного глубже, я замечаю, что эта ошибка не является фактической ошибкой. Когда я проверяю «asyncResponse» внутри метода GetResponseAsync в классе HttpExtensions я замечаю ошибку:
«AsyncWaitHandle =„asyncResponse.AsyncWaitHandle“бросил исключение типа" System.NotSupportedException»
у меня нет Идея, как получить эту работу. Я что-то делаю неправильно?
Странно, я использую то же самое и его работоспособность для меня. Вы импортировали эту ссылку http://nuget.org/packages/Microsoft.Bcl.Async? – robertk
Я пробовал это с этим пакетом или без него, но оба возвращают мне ту же ошибку ... Когда я пытаюсь сделать это с помощью онлайн-URL, он работает «иногда» ... Это как-то связано с попыткой его на местном уровне? I Когда я проверяю URL-адрес с помощью FireFox, я получаю результат, который я ожидаю ... Это так странно ... –
Я вижу проблему сейчас. Поскольку эмулятор использует виртуальную машину, вы не можете использовать localhost, потому что localhsot - это телефон, а не ваш компьютер. Посмотрите это решение: http://stackoverflow.com/questions/13149304/windows-phone-8-emulator-access-localhost – robertk