WCF—在使用路由模块时获得匹配的路由

本文关键字:路由 模块 WCF | 更新日期: 2023-09-27 18:01:18

我目前正在创建一个restful WCF项目,我需要获得当前请求正在执行的方法,并且我发现的所有示例都告诉我从请求头或端点调度程序中获取操作名称。但是,我无法访问这些。我认为这是因为我没有配置任何端点。相反,我使用路由模块来实现restful url。例如,在我的global .asax.cs中定义了以下内容:

RouteTable.Routes.Add(new ServiceRoute("authentication", new MavizonWebServiceHostFactory(), typeof(AuthenticationService)));
RouteTable.Routes.Add(new ServiceRoute("offers", new MavizonWebServiceHostFactory(), typeof(OfferService)));
RouteTable.Routes.Add(new ServiceRoute("settings", new MavizonWebServiceHostFactory(), typeof(SettingsService)));
RouteTable.Routes.Add(new ServiceRoute("user/cars", new MavizonWebServiceHostFactory(), typeof(CarService)));
RouteTable.Routes.Add(new ServiceRoute("user/notifications", new MavizonWebServiceHostFactory(), typeof(NotificationService)));
RouteTable.Routes.Add(new ServiceRoute("user", new MavizonWebServiceHostFactory(), typeof(UserService)));
RouteTable.Routes.Add(new ServiceRoute("version", new MavizonWebServiceHostFactory(), typeof(MetaService)));

我正在尝试从授权管理器获取此信息,因此我正在尝试使用OperationContext来获取此信息。

任何帮助都非常感谢!谢谢!: -)

我尝试在ServiceAuthorizationManager中使用以下调用:

System.ServiceModel.OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string;

但是什么也没有返回。然而,当我在我的服务方法中调用它时,我收到了服务的名称。这意味着此时还没有做出将调用哪个方法的决定。

所以,新的问题是:我应该使用哪个扩展点来注入我的自定义代码,这取决于知道正在调用什么服务方法,或者我可以在生命周期的早期调用路由匹配服务吗?

WCF—在使用路由模块时获得匹配的路由

简短的答案是....我放弃了。WCF有很多扩展点,我只是选择了WCF生命周期后期的一个点,在这个点上已经对操作选择做出了决定。

如果有人有这个问题的答案,我很乐意把我的答案换成你的。谢谢!