1

私はasp.netRouteTableを使用して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 });

しかし、これは公式/文書化された方法ではなく、将来のリリースで変更される可能性があるため、私の質問は、仮想パスではなくそのタイプのみに基づいて asp.net WebServiceの権利を取得する方法があるかどうかです。HttpHandler

4

1 に答える 1

1

従来の asmx WebServices に代わるものがあります。WCF Web サービスを使用すると、はるかに簡単で拡張性が高くなります。ここからWCFサービスをIISルーティングパイプラインと統合する方法を最終的に見つけました

ここに簡単なスニペットがあります:

RouteTable.Routes.Add(new ServiceRoute("CustomServiceAddress", new ServiceHostFactory(), typeof(WCFService)));
于 2012-12-17T19:17:04.577 に答える