Я разработал приложение 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
Забыл упомянуть, что приложение должно будет использовать проверку подлинности Windows, поэтому особый способ построения HttpClientHandler. – Eddie
Следует упомянуть еще о том, что Fiddler не записывает никаких попыток вызова Web API даже при том, что он использует фильтр для URL веб-API и должен иметь возможность фиксировать любую попытку заголовка трафика до указанного IP-адреса и порта , Это означает, что вызов «GetAsync» даже не покидает планшет, так сказать. – Eddie
Чтобы добавить дополнительный контекст к этому вопросу, вложенное сообщение в исключении говорит: «Не удалось выполнить попытку подключения, потому что связанная сторона не ответила должным образом через какое-то время или установив соединение не удалось, потому что подключенный узел не смог ответить 127.0.0.1 : 8888" – Eddie