当从文件导入虚拟目录时,IIS 6 强制 AppRoot/Starting Point 为大写
Posted
技术标签:
【中文标题】当从文件导入虚拟目录时,IIS 6 强制 AppRoot/Starting Point 为大写【英文标题】:IIS 6 forces AppRoot/Starting Point to upper case when Virtual Directory is imported from a file 【发布时间】:2010-04-13 19:12:24 【问题描述】:我在网上搜索了这个,但找不到任何东西(好吧,一篇远程相关的帖子),所以我在这里。
我们在 IIS 6 中有多个使用表单身份验证的 ASP.NET 应用程序,每个应用程序都有专用路径。由于路径区分大小写,它必须与 URL 的路径部分完全匹配。但是,由于 IIS 6 Metabase for AppRoot(或 IIS UI 中的起点)的大小写不正确,只要 URL 先前在服务器上解析并以不正确的大小写发送到客户端,bowser 就不会将表单 cookie 发送到服务器。
示例:应用 URL = "https://Test.net/Application1"Cookie 路径 = /Application1元数据库 AppRoot = /LM/W3SVC/1393818691/ROOT/APPLICATIONPATH1已解析的 URL = "https://Test.net/APPLICATIONPATH1" 现在到根本原因... 我们在特定情况下手动在测试服务器上创建虚拟目录(匹配每个应用程序的路径)。然后,我们使用 UI 将虚拟目录导出到 XML 文件,然后将其导入到另一台服务器(比如说生产),此时 IIS 决定将元数据库的 AppRoot 元素大写。
任何人都可以对此有所了解吗? IIS 上是否有我不知道的设置?我试图避免在导入后手动编辑元数据库。那是一个错误吗?
【问题讨论】:
我没有要添加的答案,但是当从文件创建新的 VirDir 时,我可以完全按照您的描述确认行为。 确实,非常烦人...最终不得不编写额外的脚本来修复损坏的 AppRoots(在我们的例子中,因为在反向代理之后,路径案例本身很重要)。此外,使用 iiscnfg.vbs 通过重命名复制配置数据库分支,approot 不会被重命名,通常会破坏它。这些工具似乎并不真正稳定。 【参考方案1】:您是否尝试过使用 MSBuild 的 SDC 任务库来设置您的 IIS 站点?
CodePlex Site
它使用简单,可以让您的部署完全自动化。
否则,一个快速的解决方法是手动编辑 Metabase.xml:
WINDOWS\system32\inetsrv\Metabase.xml
我之前也遇到过这个问题,导入xml的时候没办法解决。
【讨论】:
【参考方案2】:我找到了另一种解决方法...
在应用程序属性中,我删除了应用程序并重新启动了 IIS 并再次添加了应用程序。 重新启动会强制更新磁盘中的元数据库并删除错误的条目。如果不重新启动,元数据库仍然会有大写的入口。 创建新应用程序后,它将以正确的大小写添加到元数据库中,问题就解决了。
可能要做的事情更多,但比直接更改元数据库更安全!
【讨论】:
以上是关于当从文件导入虚拟目录时,IIS 6 强制 AppRoot/Starting Point 为大写的主要内容,如果未能解决你的问题,请参考以下文章