C# 获取asp.net web服务的HttpHandler
我正在使用asp.netC# 获取asp.net web服务的HttpHandler,c#,asp.net,web-services,asmx,C#,Asp.net,Web Services,Asmx,我正在使用asp.netRouteTable为Web服务注册自定义路由,但是asp.net Web服务不从IHttpHandler接口继承,因此将调用传递到底层HttpHandler既不简单也不干净 目前,唯一的官方/文档化方法是使用WebServiceHandlerFactory为服务获取正确的处理程序: IHttpHandler handler = new WebServiceHandlerFactory().GetHandler(HttpContext.Current, "*", "url
RouteTable
为Web服务注册自定义路由,但是asp.net Web服务不从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 });
但这并不是一种官方/文档化的方式,在未来的版本中可能会发生变化,因此我的问题是,如果有任何方法可以仅基于asp.net Web服务的类型而不是虚拟路径为其获得正确的
HttpHandler
,那么有一种替代传统asmx Web服务的方法,使用WCFWeb服务更容易和可扩展。我终于找到了将WCF服务与IIS路由管道集成的解决方案
下面是一个简短的片段:
RouteTable.Routes.Add(new ServiceRoute("CustomServiceAddress", new ServiceHostFactory(), typeof(WCFService)));
有一种替代传统asmx web服务的方法,使用WCF web服务更容易和可扩展。我终于找到了将WCF服务与IIS路由管道集成的解决方案 下面是一个简短的片段:
RouteTable.Routes.Add(new ServiceRoute("CustomServiceAddress", new ServiceHostFactory(), typeof(WCFService)));
您可能不知道这一点,但ASMXWeb服务是一项遗留技术。将来不会有任何版本。为什么不使用已经支持路由的WCF呢?谢谢John,你的意思是我可以在IIS路由管道中定义WCF路由吗?或者我必须使用WCF bindigs定义路由?我一直在使用WCF REST web服务,但我记得,它要求我创建自己的
ServiceHost
/WebServiceHost
和绑定,而我更愿意依赖IIS绑定。除了使用WCF WebServiceHost(Silverlight的一项服务)进行标准路由,我从未做过任何事情。我的观点很简单,WCF的可扩展性和可配置性大约是ASMX的100倍,因此没有理由坚持使用WCF所取代的旧技术。您可能没有意识到这一点,但ASMX web服务是一项遗留技术。将来不会有任何版本。为什么不使用已经支持路由的WCF呢?谢谢John,你的意思是我可以在IIS路由管道中定义WCF路由吗?或者我必须使用WCF bindigs定义路由?我一直在使用WCF REST web服务,但我记得,它要求我创建自己的ServiceHost
/WebServiceHost
和绑定,而我更愿意依赖IIS绑定。除了使用WCF WebServiceHost(Silverlight的一项服务)进行标准路由,我从未做过任何事情。我的观点很简单,WCF的可扩展性和可配置性大约是ASMX的100倍,因此没有理由坚持使用已经被WCF取代的旧技术。