错误:26 - 在托管到 Web 服务器后定位服务器/实例时出错
Posted
技术标签:
【中文标题】错误:26 - 在托管到 Web 服务器后定位服务器/实例时出错【英文标题】:Error: 26 - Error Locating Server/Instance Specified after hosting to a web server 【发布时间】:2018-12-24 18:04:51 【问题描述】:我使用 Asp.Net MVC C# 开发了网站,并且在我的电脑上的 Visual Studio 中一切正常。将网站托管到服务器后,我得到错误:26 - 错误定位服务器/指定实例。按下登录按钮后,当我尝试登录网站时出现错误。 我认为问题在于 App_Data 文件夹中自动创建的身份验证数据库 ASPNETDB.mdf 以及该数据库的 连接字符串。 我之前一直在搜索并尝试不同的已发布解决方案,但仍然无法解决错误。我在 web.config 中尝试了不同的解决方案来解决该问题,但未成功。
我正在寻找的解决方案是配置我的 ASP.NET 身份会员系统,该系统在我的电脑上本地运行良好,而不是在上传后。
我已经有一个数据库,其中包含一个与该数据库 (BicycleWorldShop2) 的连接字符串。我应该将 ASPNETDB.mdf 作为第二个数据库发布并在 web.config 文件中添加第二个连接字符串吗?我应该如何正确配置成员资格?
这是我的 Web.config 文件的代码。
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusivejavascriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
<globalization culture="en-IN" />
<authentication mode="Forms">
<forms loginUrl="~/Accounts/LogOn" timeout="2880" />
</authentication>
<customErrors mode="Off" />
<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
</providers>
</membership>
<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="BicycleWorldShop2" connectionString="Data Source=WW-PC\SqlExpress;Initial Catalog=BicycleWorldShop;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
我应该在我的代码中更改什么?
有没有人可以解决这个问题?
请帮忙,我浪费了很多时间来尝试解决这个错误!
错误:
【问题讨论】:
您是否在该 VM 上安装了 SqlServer? 我将网站发布到 smarterasp.net 主机。从已发布的数据库 BicycleWorldShop2 中读取数据可以正常工作,但问题仅在于身份验证。用户数据存储在 ASPNETDB.mdf 数据库中,该数据库是在 Visual Studio 中自动创建的,具有成员身份。 您的会员提供者依赖于connectionStringName="LocalSqlServer"
,这似乎不会导致有效实例。在您的 web.config 中添加一个额外的连接字符串,该字符串指向包含成员资格的目录。
首先将Data Source=WW-PC\SqlExpress
改为Data Source=localhost
【参考方案1】:
我建议备份 ASPNETDB.mdf 并将其还原为托管服务器上的单独数据库。然后在<connectionStrings>
web.config 部分下创建第二个连接字符串。
最后,更新成员资格、配置文件和角色管理器提供程序的 connectionstringName
属性。
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="SecondConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
将 ASPNETDB 对象添加到同一数据库的替代方法
在您的计算机上,在运行命令中键入 %WINDIR%\Microsoft.Net\Framework\
,然后转到 v4.0... 文件夹。在此文件夹中,您将找到用于创建成员身份、配置文件和角色架构的 T-SQL 脚本文件。您将需要在托管服务提供商数据库上执行脚本。
您需要先执行InstallCommon.sql
来创建公用表。然后执行以下脚本。
-
InstallMembership.sql
InstallProfile.SQL
InstallRoles.sql
注意:所有上述脚本都假定您拥有名为 aspnetdb
的数据库,因此您需要在文本编辑器中打开每个 sql 文件,然后更改以下代码行以匹配您的数据库名称:
SET @dbname = N'aspnetdb'
USE [aspnetdb]
附言
你真的需要AspNetWindowsTokenRoleProvider
吗?另外,在会员和个人资料提供者部分添加<clear/>
【讨论】:
我真的不需要 AspNetWindowsTokenRoleProvider。我正在使用 smarterasp.net 免费托管计划,它只允许使用一个连接字符串创建一个数据库。是否可以从 smarterasp.net 将具有两个不同连接字符串的两个 .mdf 文件添加到同一个数据库中?你的想法看起来很乐观,但是使用 smarterasp.net 解决问题的方法看起来有点不可用。 @ZoranZoki 您可以使用服务器资源管理器打开 ASPNETDB.mdf 或将 .mdf 文件附加到 sqlexpress。接下来为数据库模式(表和存储过程)生成 t-sql 脚本,然后在托管提供商数据库上执行该脚本以复制成员资格、角色和配置文件模式 它对我不起作用。您的想法是合并数据库。 ASPNETDB.mdf 数据库应自动创建到 App_Data 文件夹。同时我从错误建议中得到了详细信息,那就是: Sql Server Express 必须安装在机器上。 Web 服务器帐户的进程标识必须具有本地用户配置文件。有关如何为计算机和域帐户创建本地用户配置文件的详细信息,请参阅自述文件。如何检查主机上是否安装了 sql express 以及 Web 服务器帐户的进程标识是否具有本地用户配置文件? @ZoranZoki 我在答案中添加了一个替代方法部分。检查是否能解决您的问题以上是关于错误:26 - 在托管到 Web 服务器后定位服务器/实例时出错的主要内容,如果未能解决你的问题,请参考以下文章
Heroku discord bot 托管错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT
如何为托管在 Azure 上的 Web 应用程序和托管在窗口的 IIS 服务器上的 Web 应用程序使用相同的自定义域?
托管在 Pivotal Web 服务中的 Spring RESTful 没有“Access-Control-Allow-Origin”错误