1

是否存在与 Java 初始化 Servlet 等效的 .net?

当我们在它的时候,相当于一个过滤器?

最后,如果所说的东西存在(过滤器),它们可以在向 WCF 服务发出请求之前/之后运行吗?

4

2 回答 2

1

好吧,我不知道 java 框架,但从它的声音来看,您可能正在寻找 Global.asaxHttpApplication.Application_OnStart事件进行初始化。

和过滤器?试试IHttpModule

于 2010-11-09T16:53:37.013 回答
1

虽然您可以使用 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 中的自定义行为。

于 2010-11-10T13:03:09.577 回答