让我感到好奇的是,当我在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上运行。
答案 0 :(得分:8)
如果您在管道模式下使用IIS 7,则处理程序定义必须位于&lt; System.webServer&gt; 像这样:
<system.webServer>
<handlers>
<add name="YourImageHandlerName" path="*.ashx" verb="*" type="YourImageHandler" />
</handlers>
</system.webServer>
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。