2015-06-10 3 views
1

Я создаю интерфейс для связи с отдыхом для небольшого приложения для 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). 
+1

Вы вызываете 'Wait' или' Result' дальше ваш стек вызовов? Или вы называете это методом 'async void'? –

+0

так я звоню Публичный Вход в систему Логин (Имя пользователя) { Общаться <Имя пользователя, Логин> comm = новое Связь <Имя пользователя, Логин>(); Вход _loginRes = comm.CommunicateSvr (пользователь, «Login», ServiceIP) .Result; return _loginRes; } – MRBULL93

+0

спасибо @ StephenCleary, что было проблемой, я вызывал это синхронно в верхнем стеке. – MRBULL93

ответ