获取HttpHandler用于asp.net Web服务

时间:2012-12-09 20:13:19

标签: c# asp.net web-services asmx

我正在使用asp.net RouteTable为WebService注册自定义路由,但asp.net WebServices不会从IHttpHandler接口继承,因此传递调用既不简单也不干净到底层的HttpHandler

目前,唯一的官方/文件记录方式是使用WebServiceHandlerFactory来获得服务的正确处理程序:

IHttpHandler handler = new WebServiceHandlerFactory().GetHandler(HttpContext.Current, "*", "url", "path");

然而,这需要服务的虚拟路径,而不是我正在寻找的!我发现的其他解决方法实际上是使用反射攻击WebServiceHandlerFactory并调用内部CoreGetHandler方法:

var wshf = new WebServiceHandlerFactory();
var coreGetHandler = wshf.GetType().GetMethod("CoreGetHandler", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var httpHandler = (IHttpHandler)coreGetHandler.Invoke(wshf, new object[] { typeof(MyWebService), context, context.Request, context.Response });

但这不是官方/记录的方式,并且可能会在将来的版本中发生变化,所以我的问题是,如果有任何方式来获得正确的HttpHandler的asp .net WebService完全基于它的类型而不是它的虚拟路径?

1 个答案:

答案 0 :(得分:1)

可以替代传统的asmx WebServices,使用WCF Web服务更加容易和可扩展。我终于找到了如何将WCF服务与IIS路由管道from here

集成的解决方案

这是一个快速摘录:

RouteTable.Routes.Add(new ServiceRoute("CustomServiceAddress", new ServiceHostFactory(), typeof(WCFService)));