繁体   English   中英

应用程序Web部署到单独的Web服务器后的SQL Server错误

[英]SQL Server Error After Web Deploy of App to Separate Web Server

将应用程序移至Prem上其自己的Windows 2012 R2 IIS Web服务器后,出现以下错误。 SQL 2014数据库服务器在Azure中。 防火墙已禁用。

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:SQL网络接口,错误:26-指定服务器/实例时出错)

进一步:

连接字符串使用应用程序的App_Data目录中的数据库位置指定本地Sql Server Express实例。 提供者尝试自动创建应用程序服务数据库,因为提供者确定该数据库不存在。

我的连接字符串不指定任何本地SQL Express数据库:

 <connectionStrings>
    <remove name ="NewUserToolContext"/>
    <remove name ="DefaultConnection"/>
    <add name="NewUserToolContext" connectionString="Data Source=SQLDBSERVERNAME;Initial Catalog=NewUserTool;Integrated Security=False;User Id = USERID;password = PASSWORD" providerName="System.Data.SqlClient" />
    <add name="DefaultConnection" connectionString="Data Source=SQLDBSERVERNAME;Initial Catalog=NewUserTool;Integrated Security=False;User Id = USERID;password = PASSWORD" providerName="System.Data.SqlClient" />
  </connectionStrings>

我的_Layout部分视图具有一些代码,这些代码在显示特定菜单项之前检查角色成员身份。 经过大量搜索之后,我发现了2012年的旧帖子和2013年的一篇关于某种成员初始化程序的帖子。 该帖子令人难以置信的模糊和混乱,似乎并不相关。 它也没有解释该怎么做,尤其是2017年的MVC 6 Entity Framework。我尝试过,我找不到他们在说什么。 我从去年开始使用MVC 6学习ASP.NET。

首先,您是否在VM的防火墙中启用了1433端口? 如果否,则可以使用以下步骤打开此端口。

  1. 在“开始”菜单上,单击“运行”,键入WF.msc,然后单击“确定”。
  2. 在具有高级安全性的Windows防火墙的左窗格中,右键单击“入站规则”,然后在操作窗格(右上角)中单击“新建规则”。
  3. 在“规则类型”对话框中,选择“端口”,然后单击“下一步”。
  4. 在“协议和端口”对话框中,选择“ TCP”。 选择“特定本地端口”,然后键入数据库引擎实例的端口号,默认情况下,SQL Server使用1433。请输入1433,然后单击“下一步”,直到完成步骤。

其次,您还需要在Network Security Group中启用与您的VM相关的1433端口。 以下步骤供您参考。

  1. 在Netowrk接口面板中找到与您的VM相关的网络安全组名称。

在此处输入图片说明

  1. 打开此NSG,单击“入站安全规则”面板中的[添加]按钮。

在此处输入图片说明

  1. 添加如下规则。

在此处输入图片说明

  1. 之后,您可以访问VM中托管的数据库。

编辑2017/6/13

首先,我建议您在服务器上使用连接字符串之前将其写入日志文件。 您会发现是否使用正确的连接字符串来连接服务器。 也许连接字符串被其他配置覆盖。

此外,您的Web服务器是否托管在Azure VM或本地计算机上?

也请尝试在您的应用程序池高级设置中启用32位应用程序。

在此处输入图片说明

您可以尝试其他一些方法。

  1. 请检查您是否在web.config中配置了动态IP安全性或ipSecurity。 它将根据您的配置阻止任何IP地址。

  2. 在部署发行版时,您是否尝试过删除测试服务器上的所有原始文件?

在此处输入图片说明

最终发现它使用的不是我在web.config提供的正确连接字符串,而是使用了machine.configLocalSqlServer连接字符串后,我很快意识到它正在使用它,因为它在AspNetSqlMembershipProviderAspNetSqlProfileProvider被引用和machine.config中的角色提供程序部分。 我必须查找/替换所有引用LocalSqlServer ,并将其替换为我想使用的连接名称DefaultConnection 然后,我必须在Visual Studio命令提示符下的开发人员计算机上运行aspnet_regsql.exe ,并将其指向数据库以创建架构。 之后,我的应用程序开始工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM