通用处理程序不在IIS上工作

时间:2011-10-26 17:16:45

标签: c# asp.net .net handler httphandler

让我感到好奇的是,当我在Visual Studio ASP.NET开发服务器中运行Web App时,通用处理程序工作得很好。当我更改配置以直接从IIS运行它时,处理程序就会死掉。

我真的不是这方面的专家,所以对我很勉强。

它是一个图像处理程序,它会写回要在Image对象中呈现的字节数组。正如我所说,它在VS Development Server中运行良好,但在IIS上失败。它甚至没有被称为......

我试图直接调用它时得到的错误是:

  

分析程序错误说明:解析a期间发生错误   服务此请求所需的资源。请查看以下内容   特定的解析错误详细信息并修改您的源文件   适当。分析器错误消息:无法创建类型   'YourImageHandler'。源错误:第1行:<%@ WebHandler   Language =“C#”CodeBehind =“YourImagehandler.ashx.cs”   Class =“YourImageHandler”%>

有什么想法吗?

修改

更多信息:

web.config上的处理程序:

<system.web>
    <httpHandlers>
      <add verb="*" path="*.ashx"  type="YourImageHandler"/>
    </httpHandlers>
</system.web> 

Generic Handler与Web项目位于同一个程序集中,整个程序在IIS 7上运行。

3 个答案:

答案 0 :(得分:8)

如果您在管道模式下使用IIS 7,则处理程序定义必须位于&lt; System.webServer&gt; 像这样:

<system.webServer>
<handlers>
    <add name="YourImageHandlerName" path="*.ashx" verb="*" type="YourImageHandler" />
</handlers>
</system.webServer>

点击此处:http://blogs.msdn.com/b/tmarq/archive/2007/08/30/iis-7-0-asp-net-pipelines-modules-handlers-and-preconditions.aspx

  

IIS 7.0有两种管道模式:集成模式和经典模式。后者是   有时也称为ISAPI模式。

     

集成模式允许托管和本机模块注册   IIS管道中的事件。这可以实现许多新方案,例如   将ASP.NET表单身份验证应用于nonasp.net请求(静态   文件,经典ASP文件等)。

     

经典模式与IIS 6.0完全相同。在经典模式下,ASP.NET   管道(BeginRequest,AuthenticateRequest,...,EndRequest)运行   完全在IIS管道的EXECUTE_REQUEST_HANDLER事件中。   将经典模式下的ASP.NET视为管道中的管道。

另一种选择是以“经典”模式运行您的站点,在经典模式下,IIS 7的工作方式与IIS 6类似,并且与Cassini Web服务器具有相同的行为(对于此处的重要性)。

希望有所帮助。

答案 1 :(得分:3)

您必须在web.config文件中添加preCondition属性

    <add name="HandlerName" verb="*" path="Handlers/HandlerName.ashx" type="Namespace/HandlerClassName, MyAssembly, Version=1.0.*, Culture=neutral" preCondition="classicMode,runtimeVersionv4.6.1"/>

它现在为我的错误工作。

答案 2 :(得分:-1)

我认为您应该向IIS添加托管处理程序映射。添加配置是不够的。你可以看here