Я создаю интерфейс для связи с отдыхом для небольшого приложения для Windows-телефона, так как вы не можете вызвать веб-службы SOAP. Интерфейс прост и использует JsonConverter для анализа ответов json.Асинхронный вызов Windows Phone завершается
код выглядит следующим образом
public class Communicate<RequestType,ResposeType> where ResposeType:class where RequestType :class
{
public async Task< ResposeType> CommunicateSvr(RequestType _parameter,string methodName,string serverIp)
{
String reqData = JsonConvert.SerializeObject(_parameter);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, serverIp+methodName);
request.Content = new StringContent(reqData, Encoding.UTF8, "application/json");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders
.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
if (response.StatusCode == HttpStatusCode.OK)
return JsonConvert.DeserializeObject<ResposeType>(await response.Content.ReadAsStringAsync());
else
throw new Exception("Error connecting to " + serverIp+methodName+ " ! Status: " + response.StatusCode);
}
}
Я столкнулся с большой проблемой. Когда код достигнет
HttpResponseMessage response = await
client.SendAsync(request,HttpCompletionOption.ResponseHeadersRead);
конец резьбы заканчивается, и приложение, кажется, останавливается. Все еще работает, но ничего не делает. Я установил две точки останова один за другим, а второй никогда не был достигнут. Я не ошибаюсь, я много искал в Интернете, но я не нашел ничего полезного. Заранее спасибо, жду вашего ответа
На выходных окнах я получил следующее сообщение:
The thread 0xdec has exited with code 259 (0x103).
The thread 0x2180 has exited with code 259 (0x103).
Вы вызываете 'Wait' или' Result' дальше ваш стек вызовов? Или вы называете это методом 'async void'? –
так я звоню Публичный Вход в систему Логин (Имя пользователя) { Общаться <Имя пользователя, Логин> comm = новое Связь <Имя пользователя, Логин>(); Вход _loginRes = comm.CommunicateSvr (пользователь, «Login», ServiceIP) .Result; return _loginRes; } – MRBULL93
спасибо @ StephenCleary, что было проблемой, я вызывал это синхронно в верхнем стеке. – MRBULL93