How to configure an Http Handler in IIS 7?

混江龙づ霸主 提交于 2020-01-02 04:48:35

问题


Here's what I want to do:

  1. I've created a class library project and this has a class implementing the IHttpHandler interface. Let's call this class ZipHandler. Let's say the namespace is Zip.
  2. I want that whenever any Http request comes for a zip file, my ZipHandler should handle it, regardless of whether the request is to an Asp.Net application or a normal virtual directory.

Queries:

  1. Is it possible (it should be given the hype about integrated pipeline etc. in IIS 7)?
  2. How to do it?

回答1:


Here's the info I was looking for:

If you want to register your custom HTTP handler at the IIS 7 Web server level, you must compile your HTTP handler into a strongly-named assembly and deploy it to the Global Assembly Cache (GAC) because IIS 7 only picks up assemblies deployed to the GAC. It does not pick up assemblies deployed anywhere else such as the bin directory of a particular Web site or Web application.

We're aiming to add this handler at web server level. After deploying the handler in GAC, open the web.config available at the web server level (right click and browse -> open the web.config show here) and put something like this in the handler section (the fully qualified name of the class):

<handlers>
<add name="Ch8_RssHandler" path="*.rss" verb="*"
type="ProIIS7AspNetIntegProgCh8.RssHandler, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=369d834a77" preCondition="integratedMode" />
</handlers>

Note: The information snippets (1st para and code sample) are taken from the book:
Professional IIS 7 and ASP.Net Integrated Programming by Dr. Shahram Khosravi

Seems like a very nice book :)




回答2:


This MSDN article How to: Configure an HTTP Handler Extension in IIS explains what you'll have to do. See the paragraph for the Integrated mode.

The file-name extension for .zeip must be registered in both the httpHandlers element and the handlers element.

You'll have to click Add Managed Handler in the Actions pane.

Using IIS Manager in IIS 7.0 to add a custom handler extension is equivalent to registering the handler extension in the Web.config file.




回答3:


I did a test in VS2012

My handler is like this

namespace MyProject
{
    public class ZipHandler: IHttpHandler
    {
        public bool IsReusable { get { return true; } }
        public void ProcessRequest(HttpContext context) { ... }
    }
}

My web.config is

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <handlers>
      <add
        name="ZipHandler"
        path="*.zip"
        verb="*"
        type="MyProject.ZipHandler"
        preCondition="integratedMode"
      />
    </handlers>
  </system.webServer>

</configuration>

In this way I can ask for "foo.zip" and have my handler get the request.

There's also a post from Rick Strahl that can help you troubleshoot things about handlers and modules: HttpModule and HttpHandler sections in IIS 7 web.config files



来源:https://stackoverflow.com/questions/4263934/how-to-configure-an-http-handler-in-iis-7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!