跨AppDomains的多个服务实例

时间:2011-11-02 17:37:32

标签: c# asp.net wcf

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

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

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

我对WCF很新,我缺少什么?

编辑:我还没有得到任何好的回应 - 我暂时把问题放在一边,但这是迫切的需要。好像我在每个应用程序域中获得了不同的服务类副本,并且由于某种原因,数据被保留在这些对象中。我预计在后台有一些东西使用绑定来解析主appdomain中创建的服务并通过它传递数据,但还有其他事情发生。我已经阅读了无数的WCF解释和示例 - 我注意到的一件事是没有一个示例提供保留数据的服务。但是,我仍然找不到任何与我的期望相矛盾或确认的事情。

2 个答案:

答案 0 :(得分:1)

每个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

希望这有帮助。

答案 1 :(得分:0)

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