【问题标题】:Persisting a WCF service hosted within a windows service? (i.e. instantiating once and only once)持久化托管在 Windows 服务中的 WCF 服务? (即实例化一次且仅一次)
【发布时间】:2011-02-22 17:28:26
【问题描述】:

我有以下问题。在 Windows 服务中托管了一个 WCF 服务,如下所示:

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

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

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

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

非常感谢, 河豚

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

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

    sHost = new ServiceHost(new DataService());
    

    【讨论】:

    • 我得到“System.NullReferenceException:对象引用未设置为对象的实例。”这样做时出错。但我明天会研究一下(有点困难,因为它是从 WindowsService 运行的)。
    • 非常感谢。为了增加您的答案,该网站还提供了帮助:msdn.microsoft.com/en-us/magazine/cc163590.aspx
    【解决方案2】:

    我认为 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      相关资源
      最近更新 更多