.NET 4.0旧ASP.NET WebForms系统报‘Keyword not supported: server’错误求助
问题排查与解决方案
错误根源分析
从堆栈跟踪可明确:自定义成员提供程序ssirsMembershipProvider在调用GetFailedPasswordWindowForUser方法时,错误使用EntityClient解析普通SQL Server连接字符串(即myConnectionString)。EntityClient仅支持带metadata的EF专用连接字符串,无法识别普通SQL连接里的server关键字,因此抛出该错误。
具体修复步骤
1. 恢复myConnectionString的正确配置
将你修改过的myConnectionString的providerName改回System.Data.SqlClient,该连接用于直接操作SQL Server的代码(如自定义MembershipProvider),无需EntityClient:
<add name="myConnectionString" connectionString="server=svrDatabases;database=MyDatabase;uid=myuser;pwd=*****" providerName="System.Data.SqlClient" />
2. 修正自定义MembershipProvider的代码
打开ssirsMembershipProvider的实现代码,找到获取数据库连接的逻辑,确保使用SqlConnection而非EntityConnection读取myConnectionString:
- 错误示例(报错根源):
using (var conn = new EntityConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString)) { // 数据库操作逻辑 }
- 正确写法:
using (var conn = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString)) { // 数据库操作逻辑 }
3. 确认EF连接字符串有效性
myEntities的连接字符串是标准EF专用格式,保持现有配置即可:
<add name="myEntities" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=svrDatabases;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=myuser;Password=*****;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
4. 验证Membership配置指向
检查web.config中的<membership>节点,确保默认provider的connectionStringName指向myConnectionString,而非myEntities:
<membership defaultProvider="ssirsMembershipProvider"> <providers> <clear/> <add name="ssirsMembershipProvider" type="Providers.ssirsMembershipProvider" connectionStringName="myConnectionString" /> </providers> </membership>
额外排查点
- 确认系统中无其他代码将
myConnectionString的连接字符串传递给EF的ObjectContext或DbContext构造函数(此类场景必须使用myEntities)。 - 清理项目编译缓存,重启IIS后重新测试。
内容的提问来源于stack exchange,提问作者KevBarri
相关产品推荐
相关产品推荐

