Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨AppDomains的多个服务实例_C#_Asp.net_Wcf - Fatal编程技术网

C# 跨AppDomains的多个服务实例

C# 跨AppDomains的多个服务实例,c#,asp.net,wcf,C#,Asp.net,Wcf,因此,我试图在一个具有多个AppDomain的应用程序中设置一个记录器。我想在内存中创建一个中央存储区,以便所有记录的邮件都可以进入。我决定使用名为pipebinding的WCF,并创建了一个log4net appender,它创建一个通道并将所有日志事件发送到主服务 问题是,我似乎在每个AppDomain中获得了服务的新副本,因此我的单个日志最终变成了多个日志 设置是:我有一个服务契约接口,ILogSink,以及一个singleton(实际singleton,InstanceContextMo

因此,我试图在一个具有多个AppDomain的应用程序中设置一个记录器。我想在内存中创建一个中央存储区,以便所有记录的邮件都可以进入。我决定使用名为pipebinding的WCF,并创建了一个log4net appender,它创建一个通道并将所有日志事件发送到主服务

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

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

我是WCF的新手,我缺少什么


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

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

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

有关如何在IIS中承载WCF服务的详细信息,请参阅

有关如何在WAS中承载WCF服务的详细信息,请参阅


希望这能有所帮助。

考虑一下将消息队列用作日志消息的存储

那么,我想我误解了一些基本的工作原理。我的期望是,我设置了一个服务来监听命名管道位置,然后通过命名管道uri打开该服务的通道,独立于任何appdomain甚至应用程序连接到该服务。如果不是这样,你能解释一下到底发生了什么吗?如果客户端依赖于上下文,则似乎无法实现独立服务的目的…@badlander当您不在IIS或WAS中托管服务时,ServiceHost类允许您公开该服务,但它无法确定其他哪些服务实现当前托管在不同的AppDomain中。您正在为每个AppDomain创建和托管一个服务实例。@badlander有关WCF上有用的资源,请参阅如何托管您的singleton?目前有一个处理程序类,该类引用singleton服务以及单个AppDomain。我正在处理程序中实例化单例和服务主机。最终,我将重构它,以启动并托管高于此级别的单例,但现在我正在使用单个创建的处理程序/appdomain进行测试。