c# - Azure:无法执行套接字上的操作,因为系统缺乏足够的缓冲区空间或队列已满

标签 c# mongodb sockets http azure

我们正在将网站迁移到 Azure,现在有时会遇到问题,但有以下异常(exception)情况:

An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full

我们为德国的长途巴士开发了一个搜索引擎,每天向外部服务发出数千个请求:

  1. MongoDB
  2. Azure 缓存
  3. Azure 存储(Blob)
  4. 外部 API

我猜,每天大约有 250,000 个电话。或多或少所有的时间都很快又很短。我们为所有外部 API 设置了 8 秒或更短的超时,以防止挂起请求。

外部 API 主要通过以下类访问:http://pastebin.com/evNUVMXp

到目前为止,一切都运行良好,但一切都只在一台机器上运行。目前,我有 2 个用于 mongodb 的虚拟机和一个用于运行 3 个大型实例的网站。

有什么想法可以解决这个问题吗?

感谢您的帮助: 塞巴斯蒂安

最佳答案

我遇到的主要问题是 CosmosDB 客户端实例。建议在应用程序内将其用作静态。

因此,我建议引入数据客户端作为单例使用。

因此在应用程序中使用它就像:

DataClientFactory<EntityData>.Instance.DocumentDbRepository

其中,DataClientFactory 实现 Singleton 模式,DocumentDbRepository 实现围绕 CosmosDB 客户端 API(或您正在使用的数据客户端)的存储库模式。

CosmosDB 客户端(以及其他一些客户端)似乎被设计为对并行请求非常积极。

关于c# - Azure:无法执行套接字上的操作,因为系统缺乏足够的缓冲区空间或队列已满,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22480003/

相关文章:

java - 与其他人建立 P2P 连接,或 "pass the socket"

java客户端服务器端socket编程实现问题

c# - 派生类的不同 DataAnnotation 属性

c# - .NET 核心蓝牙

c# - 如何动态调用通用扩展方法?

java - 在 CLOSE-WAIT 中写入 SocketChannel

c# - 绑定(bind) DataGrid 中的 ComboBox header

mongodb - 将 MongoDB $max 结果转换为 golang 数据

mongodb - 当一个字段是请求的另一个字段的根字段时,如何在查询中获取 mongodb 的所有子字段?

node.js - Mongoose.js v3 中的版本控制