1
我使用的是asp.net RouteTable
爲WebService註冊自定義路由,但是asp.net WebServices不會繼承IHttpHandler
界面,因此它並不簡單也不乾淨以傳遞呼叫基本HttpHandler
。獲取HttpHandler的asp.net Web服務
眼下,唯一的官方/記錄的方法是使用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完全基於它的類型而不是它的虛擬路徑?
你可能不知道這一點,但ASMX Web服務是一個過時的技術。將不會有任何未來版本。爲什麼不使用已經支持路由的WCF? –
感謝John,你的意思是我可以在IIS路由管道中定義WCF路由權嗎?或者我必須使用WCF bindigs定義路線?我一直在使用WCF REST Web服務,但是我記得,它需要我創建自己的'ServiceHost' /'WebServiceHost'和綁定,而我寧願依靠IIS綁定 –
我從來沒有做過任何事情但使用WCF WebServiceHost(Silverlight的服務)進行標準路由。我的觀點是,WCF的可擴展性和可配置性約爲ASMX的100倍,所以沒有理由堅持使用WCF取代的舊技術。 –