0

我最近将我们开发区域中的多个网站从 x86 Windows 2003 (IIS6) 迁移到 x64 Windows 2008 R2 (IIS7)。我使用“msdeploy”进行迁移。最初我迁移了整个服务器,但遇到了问题,所以我最终只迁移了 IIS 配置减去脚本映射。经过一些配置更改后,我终于能够在集成模式下获得 .NET 3.5 站点服务页面。但是,我对主页的这一部分有疑问:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
<Services>
  <asp:ServiceReference Path="~/AjaxServices/FormSubmissionService.asmx" />
  <asp:ServiceReference Path="~/AjaxServices/GMapDataService.asmx" />
  <asp:ServiceReference Path="~/AjaxServices/ImageGalleryService.asmx" />
  <asp:ServiceReference Path="~/AjaxServices/MyFavoritesService.asmx" />
</Services>

其中每一个都会生成一个脚本标记,例如:

<script src="../AjaxServices/FormSubmissionService.asmx/jsdebug" type="text/javascript"></script>
<script src="../AjaxServices/GMapDataService.asmx/jsdebug" type="text/javascript"></script>
<script src="../AjaxServices/ImageGalleryService.asmx/jsdebug" type="text/javascript"></script>
<script src="../AjaxServices/MyFavoritesService.asmx/jsdebug" type="text/javascript"></script>

正在访问 Web 服务,但在尝试访问“jsdebug”时出现以下错误:

System.InvalidOperationException: jsdebug Web Service method name is not valid.
   at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
  • 该站点的应用程序池是 v2.0.050727 集成的。
  • “Enable 32-Bit Applicaitons = false”(翻转这个没有帮助)。
  • 该站点是为“任何 CPU”构建的。
  • 我在本地 Win7 机器上在 II7 下运行相同的站点,并且一切运行良好。我看到的唯一区别是应用程序池以“经典”模式运行。我尝试将服务器切换到“经典”模式,结果相同。
  • 我尝试设置debug="false",但我得到了同样的错误(除了 /js 而不是 /jsdebug)
  • 我跑aspnet_regiis -i了好几次。2.0 和 4.0 的 x64 版本
  • 我已经通过角色管理器多次重新安装了 IIS 和 .NET 3.5.1
  • 我能够访问每个 Web 服务定义页面

我想重新安装/修复 .net 2.0,但这在 WinServer 2008 中似乎是不可能的。我在别处读到重新安装操作系统是完成此任务的唯一方法。这不是一个选择。

我在某处缺少配置吗?任何帮助将不胜感激!

4

1 回答 1

2

弄清楚了。我将此处理程序添加到 web.config 中 system.webServer/handlers 下的列表顶部。脚本现在加载正常

<add name="ScriptHandlerFactory" path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304"/>

我实际上在列表中有这个处理程序,但它引用的是 4.0,它出现在“*.asmx”的 2.0 处理程序之后

于 2013-05-15T13:00:32.300 回答