c# – Azure上的MongoDB连接问题
我们有一个部署到Azure网站的ASP.NET MVC应用程序,它连接到MongoDB并进行读写操作.应用程序反复执行.每分钟几千次
我们使用Autofac初始化C#驱动程序,我们将MaxConnectionIdleTime设置为45秒,如https://groups.google.com/forum/#!topic/mongodb-user/_Z8YepNHnbI和其他几个地方所述. 我们仍然收到以下大量错误:
我们在连接到部署在Azure上的同一数据中心/区域中的VM上的MongoDB实例以及连接到外部PaaS MongoDB提供程序时都会收到此错误. 我在本地计算机上运行相同的代码并连接到同一个数据库,我没有收到这些错误.只有当我将代码部署到Azure网站时. 解决方法
每分钟几千个请求是一个很大的负担,唯一的方法是通过控制和限制任何一次可能运行的最大线程数.
由于没有太多关于您如何实现此信息的信息.我将介绍一些可能的情况. 实验时间 常数: >要处理的项目: > 50秒/或换句话说… 变量: >数据传输率: >每秒可以传输多少数据将会发挥作用,无论我们做什么,这将根据一天中的时间而变化. 我们唯一可以做的是消除来自不同cpu的更多请求,以分发我们发送的流量的重量. >处理能力: >我假设你有一个WebJob,而不是在MVC网站内部编码是自己的.它的效率非常低,不适合您想要实现的目的.通过使用WebJob,我们可以排列要由其他WebJob处理的工作项.问题的排队是Azure Queue Storage.
问题: >我们正在尝试每秒完成50笔交易,所以如果我们使用50个线程,每个交易应该在1秒钟以内完成.我们45秒的时间在这一点上没有目的. 解决方案: >设置一个WebJob并将其命名为EnqueueJob.这个WebJob将有一个唯一的目的,排队要在队列存储中处理的工作. >尝试1,如果失败,等待&重试. >将您的网站配置为自动调整x数量的cpu(请注意,您的网站和网络作业共享相同的资源) Here’s a short 10 minute video概述了如何利用队列存储和Web作业. 编辑: 另一个原因可能是因为另外两个因素,这些错误可能是因为它在一个MVC应用程序… 如果您正在使用DEBUG属性编译应用程序,而是推送RELEASE版本,则由于web.config中的设置,您可能会遇到问题,而不使用DEBUG属性,ASP.NET Web应用程序将运行请求最长为90秒,如果请求比此更??长,它将处理请求. 要将超时时间延长到90秒以上,您需要更改web.config中的[httpRuntime] [3]属性… <!-- Increase timeout to five minutes --> <httpRuntime executionTimeout="300" /> 您需要注意的另一件事是您的浏览器的请求超时设置>网络应用程序,我会说,如果你坚持在MVC中保存代码,而不是将其解压缩到WebJob中,那么可以使用以下代码向Web应用程序发出请求,并将其超时请求. string html = string.Empty; string uri = "http://google.com"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Timeout = TimeSpan.FromMinutes(5); using (HttpWebResponse response = (HttpWebResonse)request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { html = reader.ReadToEnd(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |