我正在IIS 7中托管一个wcf服务。我很好奇是否可以创建我自己的.svc HttpHandler映射和类来处理服务请求。
例如,如果我要拦截对以“.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请求执行此类操作?我不确定它是否完全相同,因为我没有必要提供文件来回复,我想拦截并代理响应。
或者是实现执行我所需的预服务逻辑的服务行为的更好方法吗?
答案 0 :(得分:1)
你想要达到什么目的?不确定是否可以替换现有的* .svc http处理程序 - 但是您可以更轻松地做的是为WCF服务创建自己的自定义ServiceHostFactory
。你基本上添加了* .svc文件的一个属性:
<%@ ServiceHost Language="C#" Debug="true"
Service="YourNamespace.YourService"
Factory="YourNamespace2.YourServiceHostFactory" %>
使用此功能,IIS现在将实例化您自己的YourServiceHostFactory
,并要求您创建YourService
类的实例。也许你可以在这里找到流程并做你需要做的事情?
答案 1 :(得分:0)
你可以使用ASP.NET Routing和一个IRouteHandler来返回你自己的IHttpHandler实现,如果你真的想要这样做的话 http://msdn.microsoft.com/en-us/library/system.web.routing.iroutehandler.gethttphandler.aspx http://msdn.microsoft.com/en-us/library/cc668201.aspx
我在过去设置WCF数据服务时已经这样做了,我不明白为什么它也不能在这里工作。