如何修复“应用程序配置中未找到连接名称'LocalSqlServer',或连接字符串为空”的错误?

8
我有一个使用SQL Server CE 4.0和Entity Framework 4.0的ASP.NET项目,在本地计算机上运行良好。 然而,当我将其移动到远程服务器并尝试登录程序的管理员部分时,出现以下错误:
The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.

它引用了远程服务器上machine.config中的以下行:
Line 237:    <membership>
Line 238:      <providers>
Line 239:        <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="" />
Line 240:      </providers>
Line 241:    </membership>

现在,我的web.config文件中没有引用名为“LocalSqlServer”的连接字符串的“AspNetSqlMembershipProvider”语句。相反,我有以下内容:

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="PUGConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

这在本地实际上是有效的。连接字符串的名称为PUGConnection,而不是LocalSqlServer。

为什么这在本地可以工作,但在远程无法工作呢?(远程服务器是共享服务器 - 我无法访问machine.config。)

如果我将连接字符串的名称更改为LocalSqlServer,那么它会起作用吗?如果是这样,为什么在我的本地计算机上会以另一种方式工作?就我所知,我的本地计算机上的machine.config看起来与远程服务器上的相同。


这是一个令人烦恼的问题。它实际上是在machine.config中定义的,因此可能在远程机器上缺失。请参见https://dev59.com/6VXTa4cB1Zd3GeqP0EUK和http://stackoverflow.com/a/3699338/10731071以获取解决此问题的建议。 - dash
似乎远程machine.config文件中并没有缺失,因为错误信息明确指出了237-241行。这一切非常令人困惑。无论machine.config中有什么,它都期望在web.config中找到相应的内容? - Cynthia
它可能只是不存在于远程machine.config中。Membership提供程序首先查找全局配置(Machine.config),然后查找本地web.config,这就是为什么替换或清除它都可以起作用的原因。 - dash
但是,如果错误消息特别提到了machine.config的237-241行,那么这不就意味着问题出在那里吗? - Cynthia
@Cynthia - 这可能是指没有预期的子连接字符串的<membership/>元素所在的行。 - dash
2个回答

17

您需要从配置文件中将其删除:

<remove name="AspNetSqlMembershipProvider" />

或者,更好的方式是,

<clear />

1
谢谢,那个方法可行(我使用了清除)。但是...为什么我在远程服务器上必须这样做,而在本地不需要呢?我的本地 machine.config 文件也有一个 AspNetSqlMembershipProvider 条目。 - Cynthia
我需要为角色提供程序做这个。很奇怪,我已经做了4年的 .net 开发,但到目前为止从未需要过。 - Echilon

4
您可以尝试将连接字符串添加到配置文件中。即使没有使用,它也应该修复在配置其他地方引用它时出现的错误。
<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

这通常位于appSettingssystem.data标签之间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接