c# - SolrNet连接说明

标签 c# solrnet

为什么 SolrNet 连接的容器保持静态?这是一个非常大的错误,因为在我们的应用程序中,当我们向我们的应用程序发送异步请求时,SolrNet 行为异常。我如何在 SolrNet 中避免这个问题?

class P
{
    static void M(string[] a)
    { 
        Thread t = new Thread(delegate()
        {
            f1();
        });
        Thread t1 = new Thread(delegate()
        {
            f2();
        });

        t.Start();
        t1.Start();
        t.Join();
        t1.Join();
    }

    static void f1()
    {
        Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr3/"));
        ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
    }

    static void f2()
    {
        Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr1/"));
        ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
    }
}

最佳答案

  1. 作为explained in the wiki ,内置容器(Startup)目前仅限于访问具有不同映射类型的多个核心/实例。如果你想要更多的灵 active ,要么切换到 Windsor/StructureMap/Autofac,要么 help implement this feature .

  2. 内置容器中的注册可能不像您所发现的那样是线程安全的,但是通过在不同线程中注册/初始化 SolrNet 您将一无所获。只需将所有初始化移动到单个线程,当您执行 solr.Query(...) 或 solr.Add(...) 时执行实际繁重的工作, 是线程安全的。

关于c# - SolrNet连接说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6830623/

相关文章:

c# - Entity Framework 6 Database First - 如何与 ADO 共享连接和事务

c# - 为什么在执行 ASP .NET Excel 互操作时出现内存不足错误?

c# - GZipStream 或 DeflateStream 类?

c# - Base64反序列化过程中的空引用异常(C#)

search - Solr:长度标准化/omitNorms = false有什么好处?

C# 相当于 C++ 中的 64 位 unsigned long long

search - Solr 中的 CopyField 似乎不起作用

solr - 如何在 Solr 中处理关系数据

c# - 在 SolrNet 中记录 debugQuery 响应的简洁方法

c# - 在此上下文中没有响应