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

时间:2014-03-18 12:53:12

标签: c# mongodb sockets http azure

我们正在将我们的网站迁移到azure,现在有一个问题,现在有以下例外:

  

无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或者队列已满;

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

  1. MongoDB
  2. Azure缓存
  3. Azure存储(Blob)
  4. 外部Apis
  5. 我猜,每天大约有250,000个电话。或多或少的所有时间都很快很短。我们对所有外部api的超时时间为8秒或更短,以防止挂起请求。

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

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

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

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

3 个答案:

答案 0 :(得分:0)

您可以尝试设置

ServicePointManager.DefaultConnectionLimit

到更高的数字,例如100,并测试出来。

以下是文档:

ServicePoint Manager Class [MSDN]

答案 1 :(得分:0)

我认为托管数据库的服务器需要增加它允许的动态端口限制。 解决方案描述为https://github.com/giggsey/libphonenumber-for-php/blob/master/src/PhoneNumberFormat.php

祝你好运。

答案 2 :(得分:0)

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

因此,我建议引入数据客户端以用作Singleton。

因此它在应用程序中的用法将是:

DataClientFactory<EntityData>.Instance.DocumentDbRepository

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

CosmosDB客户端(似乎还有其他一些客户端)在并行请求方面似乎设计得非常主动。