所以我试图在具有多个AppDomain的应用程序中设置一个记录器。我想在内存中为所有记录的消息创建一个中央存储。我决定使用名为管道绑定的WCF,并创建了一个log4net appender,它创建一个通道并将所有日志事件发送到主服务。跨应用程序域的多个服务实例
问题是我似乎得到每个AppDomain中的服务的新副本,因此我的单个日志最终成为多个日志。
的设置是我有一个服务合同接口,ILogSink,和单身(单身实际和InstanceContextMode在服务行为属性设置为单)服务实现ResultLog它可以对记录的消息的集合。在我的父AppDomain中,我实例化ServiceHost与ResultLog,并打开该服务。然后我附上一个Appender WcfResultAppender,它具有通过ChannelFactory CreateChannel调用(到服务主机地址)创建的代理副本ILogSink。在启动时,每个子AppDomain都会创建它自己的WcfResultAppender副本。
我对WCF很陌生,我错过了什么?
编辑:我还没有收到任何好的回应 - 我已经把问题放在一边,但它是一个迫切的需要。看起来好像我在每个应用程序域中都获得了不同的服务类副本,并且出于某种原因数据仍留在这些对象中。我预计后台会有一些东西使用绑定来解决在主AppDomain中创建的服务,并通过该服务传递数据,但其他事情正在发生。我已经阅读了无数WCF的解释和例子 - 我注意到的一件事是没有一个例子提供保留数据的服务。但是,我仍然无法找到任何与我的期望相矛盾或确认的东西。
你是如何托管你的单身人士? –
暂时有一个处理程序类,它具有对单例服务以及单个AppDomain的引用。我正在实例化单例以及处理程序中的服务主机。最终,我会重构这个以启动并托管这个级别以上的单例,但现在我正在使用一个创建的处理程序/ appdomain进行测试。 – badlander