IIS中创建.NET子站点遇EF存储版本错误及跳转需求咨询
问题解决方案
一、解决"Could not determine storage version"错误
结合已完成的排查,从以下方向进一步验证修复:
检查虚拟应用程序的应用程序池配置
- 确认应用池的.NET Framework版本与其他正常运行的应用完全一致,避免版本不匹配
- 核查应用池身份权限:若使用自定义账户,确保该账户拥有数据库访问权限;若为ApplicationPoolIdentity,确认对应身份在数据库中具备读写权限
验证EF配置与依赖完整性
- 检查子站点
bin目录,确认所有Entity Framework相关DLL(如EntityFramework.dll、EntityFramework.SqlServer.dll)版本与正常应用一致,无缺失或版本冲突 - 查看主站点
web.config的connectionStrings节点,若带有inheritInChildApplications="false"属性,会阻断子站点的配置继承,需移除该属性或在子站点明确配置完整连接字符串 - 在子站点DbContext构造函数中添加版本提示,强制EF指定数据库版本,示例代码:
public class YourDbContext : DbContext { public YourDbContext() : base("YourConnectionStringName") { Database.SetInitializer<YourDbContext>(null); // 明确指定SQL Server版本,如2016对应"13.0" ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace .GetItems<EntityContainer>(DataSpace.CSpace).First() .ProviderManifestToken = "13.0"; } }- 检查子站点
物理路径权限检查
确认子站点物理路径inetpub\site\subsite的权限设置与主站点一致,应用池身份对该目录拥有读取、执行权限
二、实现子站点跳转至主站点的需求
针对「开发团队可测试子站点,外部访问/subsite跳转主站点」的需求,推荐两种方案:
方案1:通过MVC路由实现跳转
在子站点RouteConfig.cs中添加优先级最高的路由规则,匹配根路径并跳转:
// 放在所有路由最前方 routes.MapRoute( name: "RedirectToMainSite", url: "", // 对应/subsite的根路径 defaults: new { controller = "Redirect", action = "ToMain" } ); // 保留原有路由规则 routes.MapRoute("TaxSupport", "TaxSupport/{controller}/{action}/{id}", new { controller = "Tax", action = "Index", id = UrlParameter.Optional }); routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Tax", action = "Index", id = UrlParameter.Optional });
创建RedirectController处理跳转逻辑:
public class RedirectController : Controller { public ActionResult ToMain() { // 永久重定向,对搜索引擎友好 return RedirectPermanent("https://www.site.com"); } }
方案2:通过IIS URL重写实现跳转(无需修改代码)
在子站点web.config的<system.webServer>节点下添加重写规则:
<rewrite> <rules> <rule name="RedirectSubsiteToMain" stopProcessing="true"> <match url="^$" /> <!-- 匹配子站点根路径 --> <action type="Redirect" url="https://www.site.com/" redirectType="Permanent" /> </rule> </rules> </rewrite>
若需允许开发团队内部访问测试,可添加IP过滤条件:
<rule name="RedirectSubsiteToMain" stopProcessing="true"> <match url="^$" /> <conditions> <add input="{REMOTE_ADDR}" pattern="^192\.168\.0\.\d+$" negate="true" /> <!-- 排除内部IP段 --> </conditions> <action type="Redirect" url="https://www.site.com/" redirectType="Permanent" /> </rule>
内容的提问来源于stack exchange,提问作者Utkarsh bachchan
相关产品推荐
相关产品推荐

