是否存在与 Java 初始化 Servlet 等效的 .net?
当我们在它的时候,相当于一个过滤器?
最后,如果所说的东西存在(过滤器),它们可以在向 WCF 服务发出请求之前/之后运行吗?
是否存在与 Java 初始化 Servlet 等效的 .net?
当我们在它的时候,相当于一个过滤器?
最后,如果所说的东西存在(过滤器),它们可以在向 WCF 服务发出请求之前/之后运行吗?
好吧,我不知道 java 框架,但从它的声音来看,您可能正在寻找 Global.asaxHttpApplication.Application_OnStart
事件进行初始化。
和过滤器?试试IHttpModule
。
虽然您可以使用 HttpApplication 的 OnStart 事件在服务启动时进行拦截,也可以使用 IHttpModule 来拦截请求,但这并不是在 WCF 中执行这些拦截的正确方法。
推荐有效的唯一原因是您托管在 IIS 中并使用 IIS 特定的挂钩。但是,WCF 服务可以托管在任何地方,您可能会发现您将服务移动到服务进程,以及更改绑定(例如,您可能使用 net-tcp 而不是 http,在这种情况下,您将如何读取通过 IHttpModule 实现传入的内容?你不能)这会导致这些钩子中断。
也就是说,理想情况下,您将在创建ServiceHost实例之前执行任何类型的初始化。但是,由于您无法访问 IIS 中 WCF 中的 ServiceHost 实例,因此您必须实现自定义ServiceHostFactory并在 svc 文件中指定该工厂(请参阅标题为在 IIS 或 WAS 中使用自定义 ServiceHost 的部分)。 采用这种方法将使其可移植。
至于拦截呼叫,您可以在客户端和服务端进行。在客户端,您将实现IClientMessageInspector,在服务器端您需要IDispatchMessageInspector(我假设您需要后者)。
为了在服务端“注入”这个检查器,您必须使用端点行为(将应用于服务上的特定端点,IEndpointBehavior的实现)或服务行为(应用于服务,通过IServiceBehavior 接口的实现)。
通过这些实现,您可以查看ServiceEndpoint(用于端点行为)或ServiceDescription类以应用检查器的实现,或 WCF 中可用的任何其他挂钩。
您可以阅读Paolo Pialorsi 的“Writing a WCF Message Inspector”,了解如何将这一切整合在一起并让您深入了解 WCF 中的自定义行为。