【问题标题】:ASP.Net moving custom HTTP handlers to IIS 8.5ASP.Net 将自定义 HTTP 处理程序移至 IIS 8.5
【发布时间】:2015-03-09 12:26:20
【问题描述】:

我一直在开发托管在 IIS 6 上的应用程序,我们刚刚升级了使用 IIS 8.5 的服务器,但无法让它在新服务器上运行。

应用程序有一个自定义处理程序,当请求扩展名为 .XmlDataTypes 的文件时调用该处理程序。

为了在 IIS6 中工作,我将映射设置为:

扩展名:'.XmlDataTypes' 路径:'C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll' 动词:全部。

在 Web.config 中:

<httpHandlers>
  <add verb="*" path="*.XmlAmenityData" type="XmlHandler"/>
  <add verb="*" path="*.XmlDataTypes" type="XmlDataTypes"/>
</httpHandlers>

这很好用。

在 IIS8.5 中,我尝试添加一个托管处理程序:

请求的路径:'*.XmlDataTypes' 类型:,选择'XmlDataTypes' 名称:XmlDataTypes

然后将其添加到 web.config 文件中:

<system.webServer>
    <handlers>
        <add name="XmlAmenityData" path="*.XmlAmenityData" verb="*" type="XmlHandler" resourceType="File" preCondition="integratedMode" />
        <add name="XmlDataTypes" path="*.XmlDataTypes" verb="*" type="XmlDataTypes" resourceType="File" preCondition="integratedMode" />
    </handlers>
</system.webServer>

当我运行一个通过 jQuery 函数请求扩展名为 .XmlDataTypes 的 URL 的页面时,我只是得到一个 404 not found 错误。

提前感谢您的帮助。

J.

【问题讨论】:

    标签: asp.net iis httphandler ihttphandler iis-8.5


    【解决方案1】:

    看起来这些是您磁盘上的文件。如果是,您的解决方案可能很简单,只需将以下内容添加到“system.webServer”下的 web.config。

    <staticContent>
        <mimeMap fileExtension=".XmlAmenityData" mimeType="application/xml" />
        <mimeMap fileExtension=".XmlDataTypes" mimeType="application/xml" />
    </staticContent>
    

    就是这样。

    但是,如果您真的依赖 HTTP 处理程序,请注意“类型”至少需要使用程序集名称完全限定。

    所以你的类型也需要包含命名空间。

    在您的代码中,“XmlHandler”不完全符合命名空间,也没有提及程序集。确保它是。

    最后,将“resourceType”更改为“Unspecified”,否则 IIS 将确保文件在执行处理程序之前确实存在。

    【讨论】:

    • 如果请求扩展名 .XmlDataTypes,则没有它处理某些 VB 的物理文件。
    • 谢谢,实际上我只是在其他地方找到了答案,但它是 resourceType="Unspecified",因为它默认为“文件”。
    【解决方案2】:

    我在这里找到的答案或关于 stackoverflow 的类似问题的答案都没有对我有用。

    我正在使用IIS 8.5, .Net v4.0, Integrated,但仍然得到一个带有以下处理程序配置的 404:

    <system.webServer>
        <handlers>
           <add name="testEmail" path="*.em" verb="*" type="MyApp.testRazorEmailHandler, MyApp" resourceType="Unspecified" requireAccess="Script" />
        </handlers>
    </system.webServer>
    


    我启用了跟踪并发现以下内容:

    116. -HANDLER_CHANGED 
    
        OldHandlerName              testEmail 
        NewHandlerName              System.Web.Mvc.MvcHandler 
        NewHandlerModules           ManagedPipelineHandler 
        NewHandlerScriptProcessor
        NewHandlerType              System.Web.Mvc.MvcHandler, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
    


    如您所见,它似乎使用我的自定义 HttpHandler testEmail 正确接收了请求,但 MVC 偷了它
    我在RouteConfig.cs 中打开了我的路线定义,发现添加了:

       routes.IgnoreRoute("{resource}.em");
    

    我让它忽略了针对我的处理程序的请求。
    希望这对某人有所帮助 - 我正在扯掉我的头发!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2012-06-12
      • 2017-03-02
      • 2012-10-25
      • 1970-01-01
      相关资源
      最近更新 更多