views:

249

answers:

2

Hello,
I would like to intercept any request made to the server for XML files. I thought that it might be possible with an HttpHandler. It's coded and it works... on localhost only (?!?!).

So, why is it working on localhost only? Here is my web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <httpHandlers>
      <add verb="*" path="*.xml" type="FooBar.XmlHandler, FooBar" />
    </httpHandlers>
  </system.web>
</configuration>

Here is my C# :

namespace FooBar
{
    public class XmlHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            HttpResponse Response = context.Response;
            Response.Write(xmlString);
        }
    }
}

As you might have seen, I'm writing the xmlString directly in the response, it's only temporary because I'm still wondering how I could give the filename instead (that's the second question ;) )

What is supposed to be written in the response is only the xml filename that will be retrieved by a flash app.

Thanks

Details :
Using IIS 6.0 on Windows Server 2003.

Edit :
When calling the page from another computer it looks like it's not getting to the HttpHandler. However, the mapping for IIS have been done correctly.

A: 

if IIS is version 6.0 or previous, handler will be ignored, because IIS handle xml extensions without calling ASP.NET process. you can change it from IIS Manager,saying iis to use asp.net for handling XML.

stefano m
Yes. The IIS Manager is already configured to handle xml extension with my dll. But still doesn't work.
Frank
IIS should be configured to have asp.net handle xml files, not your dll. COnfigure xml files the same way you see aspx files configured.
Ray
How can I define a custom behavior if it's asp.net that handles the xml?
Frank
When asp.net handles the request, it will use the mapping you set up in web.config to send the request to your httphandler
Ray
+1  A: 

I don't have an IIS6 server at hand at the moment, but there are two steps required:

The first step is not obvious because the Visual Studio integrated web server is mapping all requests to ASP.NET.

Other resources:

alexandrul
Ah. It's good to know that VS automatically maps all requests to the asp.net. Thanks for the summary. It's working now.
Frank