从 dotnetcore 网络应用程序连接到 AWS RDS
Connecting to AWS RDS from dotnetcore web app
我设置了一个 .NET Core 项目,该项目将使用来自 AWS RDS SQL 服务器实例的数据库连接,并且无法从应用程序连接到它。奇怪的是,从 SSMS,Visual studio 服务器资源管理器我可以看到数据库,只有应用程序拒绝连接。
基地设置:
- RDS SQL 服务器实例已启动且 运行,包含数据库,使用 forceSSL
- inbound/outbound 规则设置为允许 SQL 服务器类型流量
数据库已填满测试数据
使用此连接字符串:
“DefaultConnection”:“服务器=erp-devtest...amazonaws.com;初始目录=...;持久安全信息=True;用户 ID=...;密码=...”
从以下位置连接到数据库:
- SSMS = 正常
- Visual Studio 服务器资源管理器 = 正常
- .NET Core 应用 = nok
查看日志,应用似乎无法访问服务器,因为服务器端未触发任何内容。
应用程序在尝试连接时收到此错误消息:
" at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()\r\n at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)\r\n at Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)\r\n at System.Data.Common.DbCommand.ExecuteReader()\r\n at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.InitializeReader(DbContext _, Boolean result)\r\n at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()\r\n at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)\r\n at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)\r\n at DatabaseLayer.Core.Management.ProjectManagement.Get(SearchParameterDTO`1 searchParameterDTO) in ..."
你有什么解决办法吗?
更新
导致错误的调用:
try
{
Invoice invoice = _contentDbContext.Invoice.FirstOrDefault();
}
catch (Exception ex)
{ }
其中 Invoice 是现有的 Table 和 class 通常使用 EF Core 达到。
ex 返回时返回此错误消息:
ex = {"Invalid object name 'Invoice'."}
异常有一处错误
[0] = {Microsoft.Data.SqlClient.SqlError: Invalid object name 'Invoice'.}
并且上面提到的堆栈跟踪是由
抛出的
ex.SerializationStackTraceString
当我使用指向其他数据库的工作连接字符串时,发票按预期返回
没关系,一切都设置正确。我搞砸了,我从稍旧的备份中恢复了数据库,其中我的 类 与 ...set 具有相同的名称。因此,一次迁移到最新版本就可以解决问题。 :)
感谢您阅读 // 如果您知道如何恢复我浪费在本文结尾的那几个小时,请随时联系我 ;)
我设置了一个 .NET Core 项目,该项目将使用来自 AWS RDS SQL 服务器实例的数据库连接,并且无法从应用程序连接到它。奇怪的是,从 SSMS,Visual studio 服务器资源管理器我可以看到数据库,只有应用程序拒绝连接。
基地设置:
- RDS SQL 服务器实例已启动且 运行,包含数据库,使用 forceSSL
- inbound/outbound 规则设置为允许 SQL 服务器类型流量
数据库已填满测试数据
使用此连接字符串:
“DefaultConnection”:“服务器=erp-devtest...amazonaws.com;初始目录=...;持久安全信息=True;用户 ID=...;密码=...”
从以下位置连接到数据库:
- SSMS = 正常
- Visual Studio 服务器资源管理器 = 正常
- .NET Core 应用 = nok
查看日志,应用似乎无法访问服务器,因为服务器端未触发任何内容。
应用程序在尝试连接时收到此错误消息:
" at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()\r\n at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)\r\n at Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)\r\n at System.Data.Common.DbCommand.ExecuteReader()\r\n at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.InitializeReader(DbContext _, Boolean result)\r\n at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()\r\n at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)\r\n at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)\r\n at DatabaseLayer.Core.Management.ProjectManagement.Get(SearchParameterDTO`1 searchParameterDTO) in ..."
你有什么解决办法吗?
更新
导致错误的调用:
try
{
Invoice invoice = _contentDbContext.Invoice.FirstOrDefault();
}
catch (Exception ex)
{ }
其中 Invoice 是现有的 Table 和 class 通常使用 EF Core 达到。
ex 返回时返回此错误消息:
ex = {"Invalid object name 'Invoice'."}
异常有一处错误
[0] = {Microsoft.Data.SqlClient.SqlError: Invalid object name 'Invoice'.}
并且上面提到的堆栈跟踪是由
抛出的ex.SerializationStackTraceString
当我使用指向其他数据库的工作连接字符串时,发票按预期返回
没关系,一切都设置正确。我搞砸了,我从稍旧的备份中恢复了数据库,其中我的 类 与 ...set 具有相同的名称。因此,一次迁移到最新版本就可以解决问题。 :)
感谢您阅读 // 如果您知道如何恢复我浪费在本文结尾的那几个小时,请随时联系我 ;)