小编Cal*_*leb的帖子

ASP.NET 2.0-4.0 Web应用程序初始启动速度极慢.

(对不起,如果这是一个很长的问题,它说是具体的)

我工作的公司有很多站点,这些站点已经运行了一段时间没有问题.这些应用程序是ASP.NET 2.0,3.5和4.0的混合,它们都使用ADO.NET连接到一个SQL Server Standard实例(在同一个Web服务器上),所有这些实例都是用IIS7托管的.

当我们转移到升级的网络服务器时,问题就出现了.我们尽一切努力使用完全相同的设置设置服务器,数据库实例和IIS(除了不同的机器名称,以及我们从SQLExpress升级到标准的事实),据我们所知,我们做了.两台服务器都运行Windows Server 2008 R2(已应用所有当前更新),并收到默认安装.

启动其中一个应用程序时,问题非常明显.当您到达我们的应用程序的登录页面时,页面本身加载速度非常快.即使从禁用IIS缓存的新计算机加载页面时也是如此,这个页面无法缓存页面.当您输入登录信息并单击登录按钮时,问题实际上是可见的.由于我们数据库的设计(不是很好),登录过程必须访问许多数据库,理论上最多150个独立的数据库,但实际上通常是2.即使只打开2个数据库(最小),问题也会发生.这不是一个伟大的设计,但我们现在必须忍受它.

当尝试最初打开与数据库的连接时,无论您是连接到2 dbs还是40,整个过程每次都会停止大约20秒.我已经针对该进程运行了一个.NET分析器(jetbrains dottrace),并且我可以从中获取的唯一信息是,对sqlconnection.open()的一个或所有调用占90%的时间.这只发生在第一次使用应用程序时,但问题更加复杂,因为IIS似乎忽略了我们为其设置的回收设置,并在闲置几分钟后回收应用程序,导致问题再次发生.

我还试图使用SQL Server探查器来查看哪些数据库操作是导致速度减慢的原因,但是由于所有其他数据库活动,(以及我必须在生产服务器上执行此操作的事实,因为问题不会发生在我们的测试环境中)我无法确定导致停止的确切操作.我将尝试深夜进入并关闭生产站点以运行SQL分析器,但我可能无法立即执行此操作.

在研究这个问题的过程中,我尝试了几种解决方案

  • 考虑到它可能是一个名称解析问题,我尝试修改Web服务器上的hosts文件以及为连接字符串提供IP地址而不是要解析的服务器名称,没有区别.我听说LLMNR协议导致这样的问题,但我认为尝试通过IP连接或解析主机文件应该已经消除了这种可能性,我承认我从未尝试过实际关闭LLMNR.

  • 我在IIS中增加了空闲超时,回收间隔等,但这似乎没有得到尊重,更不用说解决问题了.这让我相信有一个设置会覆盖计算机上的IIS应用程序设置.

  • 多个其他代码修复,没有任何区别.SqlServer设置是否导致问题?

  • 其他我现在忘了的东西.

在帮助我解决这个问题时,我们将非常感谢任何想法,经验或行动者!

.net c# sql-server iis

18
推荐指数
1
解决办法
2万
查看次数

无法从Windows服务,WPF应用程序和SSMS连接到SQL LocalDB工作正常吗?

我正在开发的系统遇到一些麻烦.就这个问题而言,布局是一个WiX内置的msi安装程序,它安装SQL LocalDB 2012,WPF应用程序和Windows服务.Windows服务和WPF应用程序都要与同一个数据库进行通信,应用程序由用户交互驱动,计算机上的服务也是如此.

一切都安装得很干净,数据库实例以混合模式安装,因此我的数据库初始化程序为实例和数据库创建了一个新的登录和用户,而在SSMS中,它们似乎都正确配置.我可以使用新的登录信息登录并查询表格.这是我用来创建登录的代码:

IF NOT EXISTS 
(SELECT loginname 
 FROM master.dbo.syslogins WHERE name = 'BP_SERVICELOGIN') 
 BEGIN 
   CREATE LOGIN[BP_SERVICELOGIN] WITH PASSWORD = 'pw';
   CREATE USER[bpUser] FOR LOGIN[BP_SERVICELOGIN] WITH DEFAULT_SCHEMA = dbo;     
   USE DatabaseName; 
   EXEC sp_addrolemember 'db_owner', 'bpUser' 
 END
Run Code Online (Sandbox Code Playgroud)

所以我重申一下; 此登录在SSMS中工作得很好,并允许我登录并访问由WPF应用程序的初始化程序创建的数据库.

但是,我无法从Windows服务登录此数据库.我确保在我的连接字符串中使用新登录,并在那里正确设置了所有内容.我怎么知道这个?因为当我将连接字符串复制到我的WPF应用程序并使用它而不是Windows身份验证时,它可以工作!?!

该服务不断失败并显示以下消息:

"System.Data.Entity.Core.EntityException: The underlying provider failed on Open. in EntityFramework:File: Method:Open Line:0 Column:0   System.Data.SqlClient.SqlException: Login failed for user 'BP_SERVICELOGIN'. in .Net SqlClient Data"
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的连接字符串:

<add name="ConnStringName" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=DbName;User Id=BP_SERVICELOGIN;Password=pw;MultipleActiveResultSets=True;Application Name=ServiceName" />
Run Code Online (Sandbox Code Playgroud)

似乎存在一些障碍,即保持与Windows服务的连接正确连接,而其他人没有这样的问题.LocalDB安装是新鲜的,除了DB和创建的Login/User之外,没有从OOB状态对它进行任何操作.

有人可以帮忙吗?

.net sql-server connection-string windows-services database-connection

10
推荐指数
1
解决办法
1071
查看次数