Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# Azure函数异常-将日志写入表存储时出错:Microsoft.Azure.Cosmos.table.StorageException_C#_Azure_.net Core_Azure Cosmosdb_Azure Storage Blobs - Fatal编程技术网

C# Azure函数异常-将日志写入表存储时出错:Microsoft.Azure.Cosmos.table.StorageException

C# Azure函数异常-将日志写入表存储时出错:Microsoft.Azure.Cosmos.table.StorageException,c#,azure,.net-core,azure-cosmosdb,azure-storage-blobs,C#,Azure,.net Core,Azure Cosmosdb,Azure Storage Blobs,我有一个azure函数,它与blob存储通信以读取上次同步日期时间,然后在此基础上,从Cosmos数据库读取数据 很少有交互可以正常工作,在某些情况下会随机抛出以下异常 “将日志写入表存储时出错: Microsoft.Azure.Cosmos.Table.StorageException:在 无法执行套接字,因为系统缺少足够的内存 缓冲区空间或队列已满。--> System.Net.Http.HttpRequestException:套接字上的操作可能会失败 由于系统缺少足够的缓冲空间或 因为队

我有一个azure函数,它与blob存储通信以读取上次同步日期时间,然后在此基础上,从Cosmos数据库读取数据

很少有交互可以正常工作,在某些情况下会随机抛出以下异常

“将日志写入表存储时出错: Microsoft.Azure.Cosmos.Table.StorageException:在 无法执行套接字,因为系统缺少足够的内存 缓冲区空间或队列已满。--> System.Net.Http.HttpRequestException:套接字上的操作可能会失败 由于系统缺少足够的缓冲空间或 因为队列已满。-->System.Net.Sockets.SocketException (10055):无法在套接字上执行操作,因为 系统缺少足够的缓冲区空间,或者因为队列已满 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32端口, CancellationToken CancellationToken)--内部异常堆栈的结束 跟踪---在System.Net.Http.ConnectHelper.ConnectAsync(字符串主机, Int32端口,CancellationToken CancellationToken)位于 System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage 请求,布尔allowttp2,CancellationToken CancellationToken)位于 System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage 请求,取消令牌(取消令牌)位于 System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage 请求,取消令牌(取消令牌)位于 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔型doRequestAuth,CancellationToken CancellationToken) 在System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求,取消令牌(取消令牌)位于 System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage 请求,取消令牌(取消令牌)位于 Microsoft.Azure.Cosmos.Table.RestExecutor.TableCommand.Executor.ExecuteAsync[T](RESTCommand1)上的System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(任务
1发送任务,HttpRequestMessage请求,取消令牌源cts,布尔处理)
cmd、IRetryPolicy策略、OperationContext OperationContext、,
CancellationToken令牌)--内部异常堆栈跟踪的结束-----位于
Microsoft.Azure.Cosmos.Table.RestExecutor.TableCommand.Executor.ExecuteAsync[T](RESTCommand
1 cmd,IRetryPolicy策略,OperationContext OperationContext,CancellationToken token)位于Microsoft.Azure.WebJobs.Logging.Utility.SafeExecuteAsync(CloudTable,TableBatchOperation批处理)在C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.azure.webjobs.Logging\Internal\Utility.cs:Microsoft.azure.webjobs.Logging.Utility.WriteBatchAsync[T](ILogTableProvider logTableProvider,IEnumerable
1 e1)中 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.azure.webjobs.Logging\Internal\Utility.cs:line 268 at Microsoft.Azure.WebJobs.Logging.LogWriter.FlushTimelineAggregateAsync(布尔值 总是)在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.azure.webjobs.Logging\Internal\LogWriter.cs:line 265位于Microsoft.Azure.WebJobs.Logging.LogWriter.FlushCoreAsync()中 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.azure.webjobs.Logging\Internal\LogWriter.cs:line 316请求信息请求ID:RequestDate:StatusMessage: 错误代码:“


有人能告诉我如何修复它吗?

由于您没有共享函数中的任何相关代码,我的回答可能有点泛化。这似乎是由于插座耗尽的问题。虽然还有一些细节没有定论,但消除任何低垂果实的一些好建议是(我强烈建议您阅读):

我特别建议您在方法外部的静态私有实例中确保Cosmos(或表)客户端、HttpClient等的共享连接重用

静态客户端 为了避免保留的连接过多,请重用客户端 实例,而不是在每次函数调用时创建新实例。 我们建议对您使用的任何语言重用客户端连接 可能会在中编写函数。例如,.NET客户端喜欢 , , 如果您使用单个, 静态客户端

这里有一些指导原则,当您使用 Azure功能应用程序中的特定于服务的客户端:

  • 不要在每次函数调用时创建新的客户端
  • 创建每个函数调用都可以使用的单一静态客户端
  • 如果不同的函数使用相同的服务,请考虑在共享帮助器类中创建一个静态客户端
例如:

使用Microsoft.Azure.Documents.Client;
private static Lazy lazyClient=new Lazy(InitializeDocumentClient);
私有静态DocumentClient DocumentClient=>lazyClient.Value;
私有静态文档客户端初始化文档客户端()
{
//在此执行任何初始化
var uri=新uri(“示例”);
var authKey=“authKey”;
返回新的DocumentClient(uri、authKey);
}
//作用
公共静态异步任务运行(字符串输入)
{
Uri collectionUri=UriFactory.CreateDocumentCollectionUri(“数据库”、“集合”);
object document=new{Data=“example”};
等待documentClient.upsertDocumentSync(collectionUri,文档);
//剩余功能
}

Hi,您能显示代码吗?您是使用绑定还是将逻辑放在函数体中?嗨,Bowman,谢谢您的评论。所有的逻辑都在函数体中。还有连接?如果在这种情况下,可能是因为连接太多。连接字符串位于配置文件中。是的,我也这么想,但我确实创建了一个简单的控制台应用程序来测试从Cosmos db读取的数据,发出了大约10k的数据读取请求,令人惊讶的是,它工作正常。所以现在有点困惑该去哪里调查