0

我正在使用 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 下不起作用。任何帮助,将不胜感激。

4

1 回答 1

1

我能够得到这个工作,由于某种原因,在 IIS 下运行时它不会像往常一样拉入访问密钥和秘密,这可能与 ASP.NET Core 中发生的在 IIS 下运行的魔法有关。我不得不将密钥添加到我的 launchSettings.json 文件中,以使其在 IIS 中工作(它作为 ENVIRONMENT_VARIABLES 复制到 web.config。)

这是 launchSettings.json 中的 IIS 配置文件的样子:

"MobileApi IIS (DEV)": {
            "commandName": "IIS",
            "launchUrl": "{url}",
            "environmentVariables": {
                "AWS_SECRET_ACCESS_KEY": "{value}",
                "AWS_ACCESS_KEY_ID": "{value}",
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "applicationUrl": "{url}"
        },
于 2019-03-22T16:16:01.407 回答