错误: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 并将其还原为托管服务器上的单独数据库。然后在&lt;connectionStrings&gt; 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吗?另外,在会员和个人资料提供者部分添加&lt;clear/&gt;

【讨论】:

我真的不需要 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”错误

发布后在 Azure 云服务中托管的 WCF 服务错误

Angular 6 项目刷新后显示 404 错误

有没有办法在没有 cron 的托管 Web 服务器上自动运行 PHP 脚本?