我正在使用 ElasticClient C# 类连接到托管在 AWS 上的 Elasticsearch 实例。
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\{username}\.aws\credential。它有一个“默认”条目,因此不需要手动设置配置文件名称。当我运行我的 ASP.NET Core Web 应用程序并将 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
OriginalException:System.Net.Http.HttpRequestException:尝试对无法访问的网络进行套接字操作--->
System.Net.Sockets.SocketException:尝试对无法访问的网络进行套接字操作
IIS 网站运行的应用程序池设置为使用我的 Windows 帐户。显然,它在 IIS 下运行时忽略了 .aws 凭据。我还尝试使用 AWS Explorer Visual Studio 2017 扩展创建配置文件,包括“默认”和自定义命名的。
我尝试在我的 ASP.NET Core 项目中安装 AWSSDK.Extensions.NETCore.Setup nuget 包,并在 appsettings.json 中指定自定义命名配置文件,两者都像这样:
"AWS": {
"Profile": "local-dev-profile",
"Region": "us-east-1"
}
像这样:
"AppSettings": {
"AWSProfileName": "local-dev-profile",
},
两者都不起作用,我仍然得到相同的“尝试对无法访问的网络进行套接字操作”错误。我遵循了所有的 AWS 指南,感觉我做对了,但它在 IIS 下不起作用。任何帮助,将不胜感激。