2015-12-27 4 views
0

Я пытаюсь сделать запрос GET на свой сервер через приложение Windows Mobile, над которым я работаю. Запрос останавливается между ними и не проходит. Он заканчивается без ошибок.HttpWebRequest Запрос GET прекращается во время обработки

Вот мой код:

public void LoginClick() { 
    var myTask = LoginUser(email, password); 
    string result = myTask.Result; 
} 

private async Task<string> LoginUser(string email, string password) 
{ 
    //Declarations of Variables 
    string result = ""; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://MYmobileservice.azure-mobile.net/api/loginuser?email="+email+"&password="+password); 
    request.ContinueTimeout = 4000; 

    request.Credentials = CredentialCache.DefaultNetworkCredentials; 

    //Add headers to request 
    request.Headers["Content-Type"] = "application/json"; 
    request.Headers["ACCEPT"] = "application/json"; 
    request.Headers["X-ZUMO-APPLICATION"] = "<SERVER-KEY-THE-APP-NEEDS>"; 

    using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) 
    { 
     if (response.StatusCode == System.Net.HttpStatusCode.OK) 
     { 
      //To obtain response body 
      using (Stream streamResponse = response.GetResponseStream()) 
      { 
       using (StreamReader streamRead = new StreamReader(streamResponse, Encoding.UTF8)) 
       { 
        result = streamRead.ReadToEnd(); 
       } 
      } 
     } 
    } 

    return result; 
} 

Почему это заканчивается без завершения? Что-то не так с моим кодом?

+0

Вы определенно не должны отправлять пароль открытого текста по небезопасному соединению. – LegionMammal978

+0

@ LegionMammal978 Кроме этого, вы видите причину сбоя запроса во время обработки? – Dinuka

ответ

2

Вы должны использовать async полностью. Вот как переписать обработчик события:

public async void LoginClick() { 
    string result = await LoginUser(email, password); 
} 

Я делаю предположение, что LoginClick ссылается делегат на Click событиечрезвычайной Вход кнопки. Обратите внимание, что я украсил метод модификатором async. Также обратите внимание, что код теперь await, содержащий Task, возвращенный LoginUser. Возможно, вы захотите использовать соглашение LoginUserAsync, но это не обязательно.

Оберните свой код в методе LoginUser в блоке try/catch. Установите контрольную точку в блоке catch, чтобы проверить все брошенные исключения. Вы можете посмотреть документацию HttpWebRequestи связанные с ней типы, чтобы узнать, какие исключения они могут выбрасывать.

Скорее всего, что только с помощью правильного асинхронной кода будет решить вашу проблему, потому что вызов myTask.Result или myTask.Wait() будет блокировать поток пользовательского интерфейса, который является вашей наиболее вероятной проблемой.

Смежные вопросы