我有一个使用 .NET 8 开发的简单 API,它使用 Npgsql 版本 4.0.0 连接到 postgreSQL DB。
API 打开连接、查询数据库版本、关闭连接。
API 已上传到 2 台服务器,运行 Windows Server 2019 并通过 IIS 公开 API。
两台服务器都有:
API 构建具有:
但是,虽然在一台服务器上一切正常,但另一台服务器在 connection.open() 期间生成此错误;
Values Problem to open the connection
System.InvalidProgramException: Common Language Runtime detected an invalid program.
at Npgsql.NpgsqlDataReader.Read(Boolean async)
at Npgsql.NpgsqlDataReader.Read()
at Npgsql.PostgresDatabaseInfo.LoadBackendTypes(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async)
at Npgsql.PostgresDatabaseInfo.LoadPostgresInfo(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async)
at Npgsql.PostgresDatabaseInfoFactory.Load(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async)
at Npgsql.NpgsqlDatabaseInfo.Load(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async)
at Npgsql.NpgsqlConnector.LoadDatabaseInfo(NpgsqlTimeout timeout, Boolean async)
at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.ConnectorPool.AllocateLong(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
--- End of stack trace from previous location ---
at Npgsql.NpgsqlConnection.Open()
at MyAPI.Values.Values(String httpRequestDomainName) in \Controllers\Values.cs:line 45
我尝试改变:
但没有成功。
奇怪的是,当使用 Kestrel 时,应用程序可以正常工作,只有当使用 IIS 时,应用程序就无法工作。
对于业务选择,不可能使用kestrel,我们必须使用IIS。
谢谢
由于此 API 已经在您的一台 IIS 服务器中正常工作,因此我认为两个服务器环境或配置之间应该存在一些差异。
首先,您可以检查这两台服务器的操作系统和安全更新版本是否一致。
其次,比较两台服务器上安装的 .NET SDK 版本是否相同,因为发布步骤是由 .NET Core SDK 处理的。只需执行此命令行:
dotnet --list-sdks
.
第三,确保托管应用程序池配置为
No Managed Code
和 Integrated Mode
。
如果以上方法都不起作用,我想你就得寻找更多信息来查明问题所在,比如更详细的日志信息。