由 IIS 7 和全局变量(单例)托管的 WCF 服务

Posted

技术标签:

【中文标题】由 IIS 7 和全局变量(单例)托管的 WCF 服务【英文标题】:WCF Service hosted by IIS 7 and global variables ( singletons ) 【发布时间】:2011-03-16 17:29:49 【问题描述】:

就我而言,我使用 Lucene.Net 进行搜索,并希望使用 IndexReader 和 IndexSearcher 的单个实例。我应该将它们从一个方法中移到哪里,以便能够为第一个查询实例化一次然后重用。

    public static List<MyType> GetIndexMatches(string fullTextIndexPath, string keyWord ) 
        
            IndexSearcher searcher = null;
            IndexReader reader = null;
            try
            
                searcher = new IndexSearcher(fullTextIndexPath);
                reader = IndexReader.Open(fullTextIndexPath);
...

【问题讨论】:

【参考方案1】:

您是否尝试过将它们设置为存在于服务级别(而不是 Web 方法级别)的静态?

【讨论】:

【参考方案2】:

我不确定你是否熟悉 IoC(控制反转),但如果你使用像 Castle Windsor 或 Ninject 2 这样的容器(这两个都与 WCF 很好地集成,并且可以接管 WCF 服务实例的创建通过容器),您可以为您的 IndexSearcher 和 IndexReader 配置一些可注入的依赖项。在定义这样一个组件的时候,你可以给他们一个单例的“生活方式”。使用 IoC 容器的好处是您可以将相同的组件实例注入到任何需要它们的依赖类中,并轻松地在整个应用程序中重用您的单例组件。

Castle Windsor Ninject 2

【讨论】:

以上是关于由 IIS 7 和全局变量(单例)托管的 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

IIS 7 托管 WCF 服务使用域帐户作为应用程序池标识

IIS 7.5 中的 WCF 服务托管 - 由于扩展配置,无法提供您请求的页面 [重复]

WCF IIS 托管服务由单个服务实现的多个服务合同 - 如何通过配置在端点之间共享 uri

单例模式

如何结合调试 Azure 应用服务和 IIS 托管的 WCF?

使用 Windows 身份验证的 IIS 托管 WCF 服务和 SQL 查询