Я использую класс C# ElasticClient для подключения к экземпляру Elasticsearch, размещенному на AWS.
var pool = new SingleNodeConnectionPool(new Uri(Url));
var httpConnection = new AwsHttpConnection(Region);
var config = new ConnectionSettings(pool, httpConnection)
.PrettyJson()
.DisableDirectStreaming()
.DefaultTypeName(TYPE)
.DefaultIndex(INDEX);
_client = new ElasticClient(config);
Для установки ключа доступа и секрета у меня есть файл учетных данных, хранящийся на моем компьютере с Windows здесь: C:\Users\{имя пользователя}\.aws\credential. Он имеет запись «по умолчанию», поэтому установка имени профиля вручную не требуется. Это работает нормально, когда я запускаю свое веб-приложение ASP.NET Core с параметром Launch, установленным на Project.
Однако, как только я перехожу на Launch: IIS...
...тогда соединение с Elasticsearch не работает. Всякий раз, когда я пытаюсь выполнить запрос, возникают ошибки:
Сообщение = Недопустимый ответ NEST, созданный из неудачного низкоуровневого вызова POST: /{url1}/{url2}/_search?pretty=true&typed_keys=true
Аудиторский след этого вызова API:
- 1 BadRequest: узел: https://{url1}.us-east-1 .es.amazonaws.com/ Взято: 00:00:00.0090414 #P15#
System.Net.Sockets.SocketException: попытка выполнения операции сокета в недоступной сети
Веб-сайт IIS работает с пулом приложений, настроенным на использование моей учетной записи Windows. Ясно, что он игнорирует учетные данные .aws при работе под IIS. Я также пытался создавать профили с использованием расширения AWS Explorer Visual Studio 2017, как «по умолчанию», так и с пользовательским именем.
Я попытался установить пакет nuget AWSSDK.Extensions.NETCore.Setup в своем проекте ASP.NET Core и указать пользовательский именованный профиль в appsettings.json, как это:
"AWS": {
"Profile": "local-dev-profile",
"Region": "us-east-1"
}
А вот так:
"AppSettings": {
"AWSProfileName": "local-dev-profile",
},
Ни один из них не работает, я все еще получаю ту же ошибку «Операция сокета была предпринята для недоступной сети». Я следовал всем руководствам AWS и чувствую, что делаю это правильно, но это просто не будет работать в IIS. Любая помощь будет оценена по достоинству.