跨应用域的多个服务实例

本文关键字:服务 实例 应用 | 更新日期: 2023-09-27 18:13:03

所以我试图在具有多个AppDomains的应用程序中设置一个记录器。我想在内存中创建一个中央存储,用于存放所有已记录的消息。我决定使用一个名为管道绑定的WCF,并且我创建了一个log4net appender,它创建了一个通道并将所有日志事件发送到主服务。

问题是,我似乎在每个AppDomain中都获得了服务的新副本,因此我的单个日志最终成为多个日志。

设置是我有一个服务契约接口,ILogSink和一个单例(实际的单例,和InstanceContextMode设置为Single in service Behavior属性)服务实现ResultLog,它有一个记录消息的集合。在父AppDomain中,我用ResultLog实例化ServiceHost,并打开服务。然后我附加一个AppenderWcfResultAppender,它具有通过ChannelFactory CreateChannel调用(到服务主机地址)创建的ILogSink的代理副本。在启动时,每个子AppDomain创建自己的WcfResultAppender副本。

我是很新的WCF,我错过了什么?

编辑:我仍然没有收到任何好的回应——我现在把这个问题放在一边,但这是一个迫切的需要。似乎我在每个应用程序域中都获得了服务类的不同副本,并且由于某种原因,数据留在了这些对象中。我期望后台会有一些东西使用绑定与主应用域中创建的服务进行解析,并通过它传递数据,但是发生了其他事情。我读过无数关于WCF的解释和示例——我注意到的一件事是,没有一个示例提供保留数据的服务。然而,我仍然找不到任何与我的期望相矛盾或证实的东西。

跨应用域的多个服务实例

每个AppDomain都是一个孤立的环境,它们之间没有直接的交互。

考虑通过IIS或WAS公开您的服务,它们将在自己的(单个)AppDomain中运行。

有关如何在IIS中托管WCF服务的详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms733766.aspx。

有关如何在WAS中托管WCF服务的详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms733109.aspx。

考虑使用消息队列作为日志消息的存储