2016-08-30 1 views
0

Я разработал приложение Windows 8 для бизнеса (LOB) для одного из наших клиентов. Приложение было разработано в Visual Studio 2015 на моем 64-битном Windows 8.1 Enterprise ноутбуке. В приложении используется RESTful Web API, который работает под IIS Express на том же ноутбуке. IIS Express настроен на то, чтобы открыть RESTful Web API для внешнего мира, чтобы я мог совершать вызовы Web API с Fiddler с другой машины. Мое приложение отлично работает, когда я тестирую его с помощью Simulator VS2015, даже когда я настраиваю его на использование правильного IP-адреса веб-API (а не локального хоста).Боковое приложение Windows 8.1 генерирует исключение при вызове методов веб-API RESTful

Клиент хочет развернуть это приложение в производстве на некоторых таблицах DELL, которые будут запускать Windows 10. У меня есть один из этих планшетов, и на нем есть 64-разрядная версия Windows 10 Enterprise. Когда я загружаю приложение на планшет, я запускаю его и сохраняю в его настройках URL-адрес службы веб-API. Я перезапускаю приложение, но первый вызов в веб-API не завершается. Я регистрирую исключение, сообщая мне, что «Произошла ошибка при отправке запроса». Внутреннее сообщение об исключении - «Невозможно подключиться к удаленному серверу». Строка кода, которая вызывает это исключение это одна:

HttpResponseMessage response = await WebApiHttpClient.GetAsync("api/user", HttpCompletionOption.ResponseContentRead).ConfigureAwait(continueOnCapturedContext: false); 

где объект WebApiHttpClient является статическим членом класса построен так:

if (WebApiHttpClient == null) 
{ 
    WebApiHttpClient = new HttpClient(WebApiAuthClientHandler) 
    { 
     BaseAddress = new Uri(_serviceUri), // _serviceUri is a string that looks like this "http://10.120.5.201:53045" 
     Timeout = new TimeSpan(0, 0, 150) 
    }; 

    WebApiHttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
} 

WebApiAuthClientHandler также статический член класса, который конкретизируется как это:

if (WebApiAuthClientHandler == null) 
{ 
    WebApiAuthClientHandler = new HttpClientHandler() 
    { 
     Credentials = CredentialCache.DefaultNetworkCredentials, 
     ClientCertificateOptions = ClientCertificateOption.Automatic 
    }; 
} 

исключение срабатывает около 21 секунд, после моего звонка, так что не может быть тайм-аут, так как тайм-аут устанавливается на 150 секунд ,

Веб-интерфейс работает на моем ноутбуке, как я уже упоминал ранее, и используя инструмент node.js iisexpress-proxy Мне удалось открыть локальный URL-адрес для внешнего мира, чтобы я мог создавать вызовы веб-API с использованием Fiddler планшет.

Кроме того, в моем приложении Package.appxmanifest/Capabilities Я проверил «Частные сети (клиент & Server)».

Средство просмотра событий не регистрирует никакой дополнительной информации.

Может ли кто-нибудь сделать предложение о том, почему возникла ошибка? TIA, Eddie

+0

Забыл упомянуть, что приложение должно будет использовать проверку подлинности Windows, поэтому особый способ построения HttpClientHandler. – Eddie

+0

Следует упомянуть еще о том, что Fiddler не записывает никаких попыток вызова Web API даже при том, что он использует фильтр для URL веб-API и должен иметь возможность фиксировать любую попытку заголовка трафика до указанного IP-адреса и порта , Это означает, что вызов «GetAsync» даже не покидает планшет, так сказать. – Eddie

+0

Чтобы добавить дополнительный контекст к этому вопросу, вложенное сообщение в исключении говорит: «Не удалось выполнить попытку подключения, потому что связанная сторона не ответила должным образом через какое-то время или установив соединение не удалось, потому что подключенный узел не смог ответить 127.0.0.1 : 8888" – Eddie

ответ

0

Сообщение об ошибке, которое у меня есть в моем третьем комментарии, было вызвано тем фактом, что я работал с Fiddler одновременно. При работе без Fiddler приложение получает другую ошибку, но это будет предметом другого вопроса здесь, в StackOverflow.

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