HttpClient в универсальном приложении Windows Phone 8.1

Итак, я тестирую универсальные приложения и достигла следующего:

У меня есть приложение на планшете Windows, которое получает данные с сервера.

Сервер защищен сертификатом (SSL)

У меня есть этот код, он отлично работает в простом приложении Магазина Windows и в проекте универсального приложения для планшета, но не на телефоне.

async public static Task<string> GetDataFromServer()
    {
        try
        {
            HttpClientHandler aHandler = new HttpClientHandler();
            aHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
            HttpClient aClient = new HttpClient(aHandler);
            aClient.DefaultRequestHeaders.ExpectContinue = false;
            aClient.DefaultRequestHeaders.MaxForwards = 3;
            Uri requestUri = new Uri("MYURL");
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri);
            var result = await aClient.GetAsync(requestUri, HttpCompletionOption.ResponseContentRead);
            var responseHeader = result.Headers;
            var responseBody = await result.Content.ReadAsStringAsync();
            return responseBody;
        }
        catch (Exception e)
        {
            return "";
        }
    }

Все необходимые возможности указаны в манифесте:

<Capabilities>
<Capability Name="internetClient" />
<Capability Name="sharedUserCertificates" />
<Capability Name="privateNetworkClientServer" />
<Capability Name="internetClientServer" />
 </Capabilities>
 <Extensions>
<Extension Category="windows.certificates">
  <Certificates>
    <Certificate StoreName="Root" Content="Assets\CoolCertificate.cer" />
  </Certificates>
</Extension>

Phone code - doesn't crash, no errors or warnings - just blank result.

Код: {StatusCode: 404, ReasonPhrase: 'Not Found', версия: 1.1, Content: System.Net.Http.StreamContent, Headers: {Content-Length: 0}} И никаких уведомлений для пользователю нравится в WinRT:

введите описание изображения здесь


person Cheese    schedule 25.04.2014    source источник
comment
Какой код ответа вы получаете в Windows Phone?   -  person Prasanna Aarthi    schedule 25.04.2014
comment
{StatusCode: 404, ReasonPhrase: 'Not Found', версия: 1.1, содержимое: System.Net.Http.StreamContent, заголовки: {Content-Length: 0}}   -  person Cheese    schedule 25.04.2014
comment
Похоже, он не может подключиться к серверу. Если вы попробуете использовать другой URI, это сработает? Вы уверены, что это проблема с учетными данными?   -  person kiewic    schedule 30.04.2014
comment
Как я сказал с самого начала, когда я запускаю одно и то же приложение на планшете, оно работает   -  person Cheese    schedule 30.04.2014
comment
Я также получаю такой же ответ, как {StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: {Content-Length: 0}}. Не могли бы вы мне кому-нибудь помочь?   -  person ranjith    schedule 01.07.2014


Ответы (3)


Используйте свойство aHandler.UseDefaultCredentials= true; и попробуйте еще раз. Надеюсь, это поможет решить проблему?

person AMS    schedule 26.04.2014
comment
я попробую в этот понедельник - person Cheese; 26.04.2014

Обратите внимание, что в Windows Phone 8.1 есть два класса HttpClient. Один находится внутри пространства имен System.Net.Http, а другой - в пространстве имен Windows.Web.Http.

Вы хотите использовать тот, который находится в Windows.Web.Http.

person superkinhluan    schedule 14.05.2014
comment
дело в том, что этот код находится в общем проекте универсального приложения - это означает, что он использует одни и те же пространства имен для обоих - person Cheese; 19.05.2014
comment
Проекты Windows Phone и Windows поддерживают класс Windows.Web.Http. Вы должны иметь возможность использовать его в общем проекте. - person superkinhluan; 30.05.2014

Надеюсь, у вас есть сертификат, который вам нужно использовать в качестве PFX. В этом случае, пожалуйста, обратитесь к моему ответу по ссылке.

Клиентские сертификаты Windows Phone 8.1

person Venkatesh    schedule 21.06.2014