Azure Web应用程序

时间:2015-09-04 11:35:08

标签: c# sql-server azure

我开发了一个Web应用程序标准Web应用程序,允许用户显示和更新SQL数据库中的一组数据。

Web应用程序使用AngularJS客户端,它通过MVC Web API调用与Web服务器交互,以检索和更新数据库上的数据。 服务器端代码使用.NET 4.5使用C#编写,并使用Entity Framework v6.0访问数据库。

Web应用程序托管在Azure Web App中。 数据库是Azure SQL数据库。

问题是当应用程序未使用大约10-15分钟时,再次使用它,第一次数据检索通常需要10秒以上才能返回浏览器。之后,性能良好,直到下次应用程序未使用为止。

我已在应用程序中添加了跟踪,我们发现延迟是连接打开的时间。对数据库的实际查询在亚秒内运行。

我注意到虽然使用不同的托管配置我会得到不同的结果。特别是在内部托管并指向Azure数据库时,不会遇到任何接近相同延迟的情况。

我已经更改了其中一个例程,使用ADO.NET而不是实体框架,并更改了跟踪以尝试进一步缩小范围。

我看到的是:

ConnectionStringSettings ADOcnxstring = ConfigurationManager.ConnectionStrings["DevFEConnectAdo"];
DbConnection ADOconnection = new SqlConnection(ADOcnxstring.ConnectionString);

延迟就在这里(在SQL被定义之前!

然后我构建命令并执行DataReader等:

    DbCommand ADOcommand = ADOconnection.CreateCommand();
             :
etc

因此,延迟是打开与数据库的连接。

我的连接字符串是标准的:

<add name="DevFEConnectAdo" connectionString="data   
source=feeunsqldevfeconnect.database.windows.net;initial 
catalog=feeunsqldbdevfeconnect;persist security info=True;user id=???
@???;password=???;multipleactiveresultsets=True"></add>

3 个答案:

答案 0 :(得分:3)

15分钟太短,您的应用程序无法回收(如CSharpRocks所建议)。我不认为这是问题所在。

延迟是因为在空闲超时后第一次调用时建立了新的Db连接。通常,如果4-10 minutes的连接处于非活动状态,它将被关闭。如果指定了最小池大小,则即使在空闲时间到期后,这些连接也将保持活动状态。

尝试使用此连接字符串(根据需要调整最小池大小)

<add name="DevFEConnectAdo" connectionString="data   
source=feeunsqldevfeconnect.database.windows.net;initial 
catalog=feeunsqldbdevfeconnect;persist security info=True;user id=???
@???;password=???;multipleactiveresultsets=True;Min Pool Size=3;Load Balance Timeout=180;"></add>

更多细节 Why do we need to set Min pool size in ConnectionString

SQL连接属性列表 - documentation

答案 1 :(得分:3)

一段时间后,最终在Microsoft Azure支持的帮助下解决了这个问题。

我遗漏的细节是我的Web App实际上指向了2个数据库 - 1应用程序Azure SQL数据库,我遇到了延迟问题 - 我们在Azure虚拟机上使用的“数据仓库”

由于内部数据库服务器和“数据仓库”之间的复制,虚拟机和Web应用程序都在Azure虚拟网络中。

问题是,如果虚拟网络中的Web应用程序想要与Azure SQL数据库(不能在虚拟网络中)通信,则可能存在网络问题。

我的解决方案是

  • 在数据仓库虚拟服务器上配置端点
  • 将Web应用程序从虚拟网络中取出,并通过端点指向虚拟服务器

此时所有的延迟都消失了,我可以取消MinPool尺寸设置(以及后来我发现没有做任何事情的超时)。

答案 2 :(得分:2)

网络应用程序在几分钟不活动后会被回收。尝试启用门户网站设置/应用设置中的始终开启设置,看看这是否有助于解决您的问题。

相关问题