2011-09-19 77 views
2

我在IIS 7中托管了一个wcf服务。我很好奇是否可以创建我自己的.svc HttpHandler映射和类来处理服务请求。为IIS中托管的WCF服务创建自定义.svc处理程序

例如,如果我是拦截到,随着“.foo”此时的延伸端文件的任何请求,我可以添加这对我的web.config

<handlers> 
    <add name="*.foo_**" path="*.foo" verb="*" type="MyServer.FooHttpHandler" />  
</handlers> 

而且我可以在一个类中我默认的根做了以下操作:

public class FooHandler: IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     // do stuff, validate? 

     HttpContext.Current.Response.ClearContent(); 
     HttpContext.Current.Response.ClearHeaders(); 
     HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("filename={0}", url)); 
     HttpContext.Current.Response.AddHeader("Content-Type", "fooMimeType"); 
     HttpContext.Current.Response.WriteFile(url); 
     HttpContext.Current.Response.End(); 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 

是否可以使用wcf .svc请求做这种事情?我不确定它是否完全一样,因为我没有必要为文件提供响应,我想拦截并代理响应。

或者是一个更好的方式来实现一个服务行为,我的所需的预服务逻辑?

回答

1

你想达到什么目的?不知道您是否可以替换现有的* .svc http处理程序 - 但您可以更轻松地完成的任务是为WCF服务创建您自己的自定义ServiceHostFactory。你基本上添加一个属性的* .svc文件:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="YourNamespace.YourService" 
    Factory="YourNamespace2.YourServiceHostFactory" %> 

利用这一点,IIS现在将实例自己YourServiceHostFactory并要求您创建YourService类的一个实例。也许你可以在这里找到流程并做你需要做的事情?

+0

marc_s,谢谢!我认为这可能工作 – devshorts