是否存在.net等效的Java初始化Servlet?
虽然我们正在使用它,相当于过滤器?
最后,如果说存在(过滤器)可以在向WCF服务发出请求之前/之后运行吗?
答案 0 :(得分:1)
好吧,我不知道java框架,但从它的声音中你可能正在寻找Global.asax HttpApplication.Application_OnStart
事件进行初始化。
过滤器?试试IHttpModule
。
答案 1 :(得分:1)
While you can use the OnStart event of HttpApplication to intercept when the service starts as well as IHttpModule for intercepting requests, 是在WCF中执行这些拦截的正确方法。
推荐的唯一原因是因为您在IIS中托管并使用特定于IIS的挂钩。但是,WCF服务可以托管在任何地方,您可能会发现将服务移动到服务进程,以及更改绑定(例如,您可能使用net-tcp而不是http,在这种情况下,您将如何使用阅读通过IHttpModule实现进入的内容?你不能)这会导致这些钩子中断。
也就是说,理想情况下,在创建ServiceHost实例之前,您将执行任何类型的初始化。但是,由于您无权访问IIS中的WCF中的ServiceHost实例,因此您必须实现自定义ServiceHostFactory和specify that factory in your svc file (see the section titled Using a Custom ServiceHost in IIS or WAS).采用此方法将使其可移植。
对于拦截呼叫,您可以在客户端和服务端执行此操作。在客户端,您将实现IClientMessageInspector,并在服务器端实现IDispatchMessageInspector(我假设您需要后者)。
为了在服务端“注入”此检查器,您必须使用端点行为(适用于服务上的特定端点,IEndpointBehavior的实现)或服务行为(适用于服务上的所有端点,通过IServiceBehavior interface)的实现。
通过这些实现,您可以查看ServiceEndpoint(针对端点行为)或ServiceDescription类来应用检查器的实现,或者WCF中可用的任何其他挂钩。
您可以阅读Paolo Pialorsi's "Writing a WCF Message Inspector",了解如何将所有内容整合在一起,并让您深入了解WCF中的自定义行为。