【发布时间】:2012-02-17 19:27:43
【问题描述】:
我在 IIS6 下遇到以下问题。我完全理解这个问题,我只是在寻找最佳解决方案。
我有以下几点:
- 默认网站
- api 服务
- 我们的网站
网站“apiservices”仍在 .NET Framework v2.0 下运行。 网站“ourwebsite”在使用 MVC3 的 .NET Framework v4.0 下运行。
.NET 4.0 中引入的一个很好的新功能,即无扩展 URL 处理,由于我们的混合 .NET 框架版本而给我们带来了一些问题。
如果我去:
- 'ourwebsite' -> 右键 -> 属性 -> 虚拟目录选项卡 -> 配置。我看到存在一个通配符应用程序映射到 .NET Framework v4.0 aspnet_isapi.dll。 这是正确的,但由于我们的设置还不够。
- 'apiservices'->右键->属性->虚拟目录选项卡->配置。我看到存在一个通配符应用程序映射到 .NET Framework v2.0 aspnet_isapi.dll 这对于我们的设置是正确的,并且不能设置为 4.0,否则它会中断。
现在,这里是由于微软的更改而引入的错误:因为 ASP.NET v4.0 应用程序没有在根级别定义通配符映射,所以我们应用程序内部的默认网站、PageMethods 不正确路由和 404。
疯狂的部分?如果我去:
- “默认网站”-> 右键单击-> 属性-> “主目录”选项卡-> 配置。然后,从这里,将 .NET Framework v4.0 添加到我的通配符应用程序映射中。
- 我单击确定。系统提示我指出我希望将这些更改应用到哪些子网站,因为它们都定义了自己的通配符应用程序映射。 我在此表明我只希望将此通配符映射应用于“我们的网站”而不是“apiservices”
应用此更改解决了我们的问题。
现在,我想知道,我该如何设置呢?这是 web.config 文件的工作——它可以像这样控制上层设置吗?还是我们的安装程序的自定义操作的工作?
编辑:看起来我需要使用 WIX 来执行此操作。目前,我有下面的代码在子级别设置通配符映射。我正在探索在不覆盖“apiservices”通配符映射的情况下在根级别设置它的方法:
<iis:WebVirtualDir Id="CSWebVirtualDir" Alias="[TARGETCSWEBVDIR]" Directory="CABLESOLVEWEBDIR" WebSite="DefaultWebSite">
<iis:WebApplication Id="CSWebApplication" Name="[TARGETCSWEBVDIR]" AllowSessions="yes" ParentPaths="yes" ScriptTimeout="900" SessionTimeout="60" WebAppPool="CSWebAppPool" ClientDebugging="no" ServerDebugging="no" Isolation="medium">
<iis:WebApplicationExtension Executable="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" CheckPath="no" Script="yes" Verbs="GET,HEAD,POST" />
</iis:WebApplication>
<iis:MimeMap Id="MIMEXAP" Type="application/x-silverlight-app" Extension=".xap" />
<iis:MimeMap Id="MIMEXAML" Type="application/xaml+xml" Extension=".xaml" />
</iis:WebVirtualDir>
<iis:WebVirtualDir Id="CSWebAPIVirtualDir" Alias="[TARGETCSWEBAPIVDIR]" Directory="CABLESOLVEWEBAPIDIR" DirProperties="CSWebAPIVirtualDirProperties" WebSite="DefaultWebSite">
<iis:WebApplication Id="CSWebAPIApplication" Name="[TARGETCSWEBAPIVDIR]" ParentPaths="yes" AllowSessions="yes" ScriptTimeout="900" SessionTimeout="60" WebAppPool="CSWebAPIAppPool" ClientDebugging="no" ServerDebugging="no" Isolation="medium">
<iis:WebApplicationExtension Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" CheckPath="no" Script="yes" Verbs="GET,HEAD,POST" />
</iis:WebApplication>
</iis:WebVirtualDir>
【问题讨论】:
-
两个网站是否在 IIS 的同一个应用程序池下运行?
-
不,他们有单独的应用程序池。
标签: asp.net deployment iis-6 isapi-rewrite