Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当结果太大时,托管在docker SQL请求中的ASP.Net核心超时_C#_Sql Server_Docker_Asp.net Core 2.1 - Fatal编程技术网

C# 当结果太大时,托管在docker SQL请求中的ASP.Net核心超时

C# 当结果太大时,托管在docker SQL请求中的ASP.Net核心超时,c#,sql-server,docker,asp.net-core-2.1,C#,Sql Server,Docker,Asp.net Core 2.1,我有一个奇怪的问题: 我有一个基于ASP.NETCore2.1的WebAPI,它在生产中位于docker容器中。 只要api不接收具有“更大”结果的查询,并且大体上我的意思是只有大约75个结果和大约45kB的结果体大小,那么一切都可以正常工作。这应该没什么大不了的 到目前为止,我一直跟踪到sql连接: 例如,如果我尝试获取所有CustomerModels,api将进行三次sql查询: 首先获得客户实体 第二,获得所有相关项目 第三,得到所有相关的地方 第一个查询工作得非常好。第二次失败,第三

我有一个奇怪的问题: 我有一个基于ASP.NETCore2.1的WebAPI,它在生产中位于docker容器中。 只要api不接收具有“更大”结果的查询,并且大体上我的意思是只有大约75个结果和大约45kB的结果体大小,那么一切都可以正常工作。这应该没什么大不了的

到目前为止,我一直跟踪到sql连接: 例如,如果我尝试获取所有CustomerModels,api将进行三次sql查询:

  • 首先获得客户实体
  • 第二,获得所有相关项目
  • 第三,得到所有相关的地方
第一个查询工作得非常好。第二次失败,第三次永远不会被击中。我已经试着改变了第二和第三次没有任何结果,仍然第二次超时。我甚至尝试用只返回一行的伪查询替换第二个查询:相同的问题。 因此,我围绕这些查询构建了一个try-catch,以查看问题的原因:

“ClassName”:“System.Data.DataException”,
“消息”:“超时已过期。操作完成前已过超时时间,或者服务器未响应。”,
“数据”:空,
“内部异常”:{
“ClassName”:“System.Data.SqlClient.SqlException”,
“消息”:“超时已过期。操作完成前已过超时时间,或者服务器未响应。”,
“数据”:{
“HelpLink.ProdName”:“Microsoft SQL Server”,
“HelpLink.EvtSrc”:“MSSQLServer”,
“HelpLink.EvtID”:“-2”,
“HelpLink.BaseHelpUrl”:http://go.microsoft.com/fwlink",
“HelpLink.LinkId”:“20476”,
“SqlError 1”:“System.Data.SqlClient.SqlError:超时已过期。操作完成前已过超时时间,或者服务器没有响应。”
},
“内部异常”:{
“ClassName”:“System.ComponentModel.Win32Exception”,
“消息”:“等待操作超时”,
“数据”:空,
“InnerException”:null,
“帮助URL”:空,
“StackTraceString”:空,
“RemoteStackTraceString”:空,
“RemoteStackIndex”:0,
“ExceptionMethod”:空,
“HResult”:-2147467259,
“源”:空,
“WatsonBuckets”:空,
“NativeErrorCode”:258
},
“帮助URL”:空,
“StackTraceString”:
位于System.Data.SqlClient.SqlInternalConnection.OneError(SqlException异常,布尔断开连接,操作'1 wrapCloseInAction)
位于System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject StateObjectStateObj、布尔调用方连接锁、布尔异步关闭)
位于System.Data.SqlClient.TdsParserStateObject.ReadsInError(TdsParserStateObject stateObj,UInt32错误)
位于System.Data.SqlClient.TdsParserStateObject.ReadsInSyncOverAsync()处
位于System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket()处
位于System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer()处
位于System.Data.SqlClient.TdsParserStateObject.TryReadByteArray(字节[]buff、Int32偏移量、Int32 len、Int32&totalRead)
位于System.Data.SqlClient.TdsParserStateObject.TryReadString(Int32长度、字符串和值)
位于System.Data.SqlClient.TdsParser.TryReadSqlStringValue(SqlBuffer值、字节类型、Int32长度、编码编码、布尔isPlp、TdsParserStateObject stateObj)
位于System.Data.SqlClient.TdsParser.TryReadSqlValue(SqlBuffer值,SqlMetaDataPriv md,Int32长度,TdsParserStateObject stateObj)
位于System.Data.SqlClient.SqlDataReader.TryReadColumnInternal(Int32 i,布尔readHeaderOnly)
位于System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
位于System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
位于System.Data.SqlClient.SqlDataReader.get_项(Int32 i)
在反序列化FD8A7EC6-63c9-488b-9b4c-84a91ff1d59d(IDataReader)”中,
“RemoteStackTraceString”:空,
“RemoteStackIndex”:0,
“ExceptionMethod”:空,
“HResult”:-2146232060,
“源”:“核心.Net SqlClient数据提供程序”,
“WatsonBuckets”:空,
“错误”:空,
“客户端连接ID”:“57d4bbe9-6c9f-4392-b79f-d72a8cdacd8d”
},
“帮助URL”:空,
“StackTraceString”:“在C:\\projects\\Dapper\\Dapper\\SqlMapper.cs中的Dapper.SqlMapper.ThrowDataException(Exception ex,Int32索引,IDataReader读取器,对象值)处:反序列化fd8a7ec6-63c9-488b-9b4c-84a91ff1d59d(IDataReader)\r\n在Dapper.SqlMapper.querysync[T]处的第3609行\r\n(IDbConnection cnn,Type effectiveType,CommandDefinition命令)\r\n位于FM.Iniquitas.Data.Repositories.ProjektRepositoryAsync.getbyprojectds(IEnumerable`1 projectds)“,
“RemoteStackTraceString”:空,
“RemoteStackIndex”:0,
“ExceptionMethod”:空,
“HResult”:-2146233087,
“来源”:“整洁”,
“WatsonBuckets”:空
}
很明显,连接和/或命令都超时了,所以我将两者都改为1000秒,这没有任何区别,因为sql查询不是很复杂,应该不会超过几毫秒

sql调用本身位于using块中:

GetAll()部分工作正常,但在BuildModel中,我调用类似的东西(同样是通过存储库调用的,但为了简化调用的实际代码):

var result=await UnitOfWork.Connection.querysync(“从@projectds中Id所在的项目中选择*,新建{projectds=projectds},事务:UnitOfWork.transaction);
对于事务,我尝试了两种情况:每个查询都有自己的UnitOfWork,所有三个查询都共享相同的UnitOfWork->无差异

我尝试在MS SQL Server上跟踪它,在“异步网络IO”等待后,该任务将被挂起

但真正奇怪的是:只有当api托管在docker容器中时,才会出现此问题。当我调试它(通过Visual Studio)或甚至在生产中将其托管在IIS服务器上(这是
 using (var uow = _dataService.StartUnitOfWork())
     {
         var entities = await uow.CustomerRepository.GetAll(); //works fine
         return await BuildModel(entities); //times out
     }
var result = await UnitOfWork.Connection.QueryAsync<Projekt>("SELECT * FROM Project WHERE Id IN @ProjectIDs", new { ProjectIDs = projectIDs }, transaction: UnitOfWork.Transaction);