Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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# 将WCF应用程序中的实例对象共享给其他应用程序_C#_Vb.net_Wcf_Singleton - Fatal编程技术网

C# 将WCF应用程序中的实例对象共享给其他应用程序

C# 将WCF应用程序中的实例对象共享给其他应用程序,c#,vb.net,wcf,singleton,C#,Vb.net,Wcf,Singleton,考虑这种情况:我有一个WCF服务,它只为所有客户端创建一次对象(InstanceContextMode:=InstanceContextMode.Single)。这个很好用。此对象是一个复杂对象,用作处理器。因此,我需要同一个对象实例被同一台windows机器下的另一个应用程序访问,这台机器可以是winform或windows服务。通过这样做,我不需要为每个其他应用程序创建新对象,只需要使用WCF以前创建的相同对象。怎么做 我读过singleton模式,但它似乎只在单个应用程序中工作,还是我错了

考虑这种情况:我有一个WCF服务,它只为所有客户端创建一次对象(InstanceContextMode:=InstanceContextMode.Single)。这个很好用。此对象是一个复杂对象,用作处理器。因此,我需要同一个对象实例被同一台windows机器下的另一个应用程序访问,这台机器可以是winform或windows服务。通过这样做,我不需要为每个其他应用程序创建新对象,只需要使用WCF以前创建的相同对象。怎么做


我读过singleton模式,但它似乎只在单个应用程序中工作,还是我错了?

每个可执行文件/进程都在自己分配的内存中运行。要在多个进程之间共享数据,可以使用内存映射文件。要执行锁定,可以使用互斥锁或sempahore。但你必须有一个很好的理由来解释为什么你要这么做。也许你应该重新审视你的设计,以及你想通过在两个进程之间共享数据来实现的目标。在@Neills评论中,关于单例WCF的使用,请阅读这篇文章:-我会不惜一切代价避免。我的例子是:我有一个拥有数据库的对象。该对象应在单个实例中运行,并执行设备发现和其他操作,包括更新其数据库。此对象具有公共方法和事件。此对象应在计算机启动时运行,只有在计算机关闭时才会关闭。我需要其他客户端与此对象通信,所以我创建了WCF服务。这个对象也应该可以被我现在或将来开发的任何其他应用程序访问。不知何故,我想我会创建一个windows服务来承载这个对象。单独的WCF服务将访问它。Cntinue..但是一些用户说,如果我可以在IIS服务器中托管WCF服务并运行该对象,为什么我需要创建另一个windows服务?所以在最后我创建了WCF服务并创建了这个对象。我将WCF instancecontextmode设置为single,以确保该对象只初始化一次,而不是每次发出请求时都被调用。这很有效。但我还有一个问题。我需要我的其他应用程序可以访问此对象。2解决方案:创建新对象或使用同一实例。继续下面的内容。如果可能的话,我更愿意使用相同的实例,以使对象持久化,并且不消耗更多内存。而且因为将有更多的其他应用程序需要访问obejct。我希望避免创建另一个对象,因为如果我有5个应用程序,这意味着它将创建另一个5对象。由于这个对象就像一个处理器,对其数据库进行更新,我担心多个对象会把它搞砸。我欢迎任何建议和建议。谢谢