是否在Windows服务中托管WCF服务? (即实例化一次且仅一次)

时间:2011-02-22 17:28:26

标签: c# wcf

我有以下问题。在这样的Windows服务中托管了一个WCF服务:

sHost = new ServiceHost(typeof(DataService));
_thread = new Thread(new ThreadStart(sHost.Open));
_thread.Start();

DataService是解决方案中的WCF服务合同。

WCF服务下面的几个层是单独程序集中的缓存。但是,每次创建到WCF服务的新连接/代理时,都会创建一个新的服务实例。这导致在DAL中创建缓存的新实例。所以我想要做的是拥有WCF服务,因此堆栈中的所有类只实例一次(由于多重性要求而有一些例外)。因此,应该实例化WCF服务并侦听新连接,而不是每次都建立新连接时都要实例化DataService。

我希望这是有道理的。我该怎么做?

非常感谢, 河豚

2 个答案:

答案 0 :(得分:2)

自己实例化DataService并将实例传递给ServiceHost构造函数:

sHost = new ServiceHost(new DataService());

答案 1 :(得分:1)

我认为alexdej答案是正确的,但是没有看到你的代码无法评论为什么你得到Null引用异常。

我可以指出这些视频',我在2天前完成了这些视频以帮助学习WCF,我相信他们会回答你的问题。

自托管WCF - http://channel9.msdn.com/shows/Endpoint/Endpoint-Screencasts-Self-hosting-WCF-Services/

将WCF托管为Windows服务 - http://channel9.msdn.com/shows/Endpoint/endpointtv-Screencast-Hosting-WCF-Services-in-Windows-Services/