ASP.Net将自定义HTTP处理程序移动到IIS 8.5

时间:2015-03-09 12:26:21

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

我一直在开发一个托管在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中,我尝试添加托管处理程序:

请求的路径:&#39; * .XmlDataTypes&#39; 输入:,选择&#39; XmlDataTypes&#39; 名称: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找不到错误。

提前感谢您的帮助。

学家

2 个答案:

答案 0 :(得分:1)

看起来这些是您磁盘上的文件。如果是这样,您的解决方案可以简单到将以下内容添加到&#34; system.webServer &#34;下的web.config中。

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

那就是它。

但是,如果您真的依赖HTTP处理程序,请注意&#34; Type&#34;需要至少使用程序集名称完全限定。

因此您的类型也需要包含命名空间。

在你的代码中,&#34; XmlHandler&#34;没有完全限定命名空间,并且没有提到程序集。确保它是。

最后,更改&#34; resourceType&#34;到&#34;未指定&#34;或IIS将在执行处理程序之前确保文件真正存在。

答案 1 :(得分:0)

我在这里找到的答案或者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");

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