c# - 跨 AppDomains 的多个服务实例

标签 c# asp.net wcf

因此,我尝试在具有多个 AppDomain 的应用程序中设置一个记录器。我想在内存中创建一个中央存储,以供所有记录的消息进入。我决定使用 WCF 命名管道绑定(bind),并且创建了一个 log4net appender,它创建了一个 channel 并将所有日志事件发送到主服务。

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

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

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

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

最佳答案

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

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

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

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

希望这对您有所帮助。

关于c# - 跨 AppDomains 的多个服务实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7984803/

相关文章:

c# - 绑定(bind) Ninject Kernel ToConstant 并使用 InTransientScope 有什么意义?

c# - 访问 Unity 层的名称

c# - 使用 LINQ,如何限制根据子表属性检索的行?

php - 如何在客户端获取页面 HTML 或 javascript

wcf - 如何在 1 个 Windows 服务中托管 2 个 WCF 服务?

.net - 如何在 WCF 服务和客户端之间共享对象?

c# - 如何使用标签进行简单的发票计算?

c# - 防止滚动表格中的单个列

wcf - 如何正确扩展WCF返回的类?

c# - 格式化 .NET DateTime "Day",不带前导零