Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取asp.net web服务的HttpHandler_C#_Asp.net_Web Services_Asmx - Fatal编程技术网

C# 获取asp.net web服务的HttpHandler

C# 获取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

我正在使用asp.net
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取代的旧技术。