Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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# 在web服务中验证Solr连接_C#_Web Services_Solr_Solrnet - Fatal编程技术网

C# 在web服务中验证Solr连接

C# 在web服务中验证Solr连接,c#,web-services,solr,solrnet,C#,Web Services,Solr,Solrnet,我正在开发一个web服务,它应该获取一些数据,使用它们进行查询,在Solr中搜索并返回适当的结果!它工作正常,但我只需要它初始化Solr一次到目前为止,我得到了以下结果: private static bool initialized = false; [WebMethod] public XmlDocument getContributor(string name,string email) { if (!initialized) {

我正在开发一个web服务,它应该获取一些数据,使用它们进行查询,在Solr中搜索并返回适当的结果!它工作正常,但我只需要它初始化Solr一次到目前为止,我得到了以下结果:

 private static bool initialized = false;

    [WebMethod]
    public XmlDocument getContributor(string name,string email)
    {
        if (!initialized)
        {
            Startup.Init<SolrSearchResult>("http://Host:44416/solr");
            initialized = true;
        }
        if (string.IsNullOrEmpty(email))
        {
            return SolrSearchResult.SearchData(name);
        }
        return SolrSearchResult.SearchDataWithEmail(name, email);
    }
private static bool initialized=false;
[网络方法]
公共XmlDocument getContributor(字符串名称、字符串电子邮件)
{
如果(!已初始化)
{
Startup.Init(“http://Host:44416/solr");
初始化=真;
}
if(string.IsNullOrEmpty(电子邮件))
{
返回SolrSearchResult.SearchData(名称);
}
返回SolrSearchResult.SearchDataWithEmail(名称、电子邮件);
}
但我认为当多个用户使用时,它将不起作用!我需要一个更聪明的方法来解决这个问题!如果有任何建议,我将不胜感激


我看过SampleSolrApp,应用程序_Start中使用了startup.init,但我不知道这里的等效方法是什么。

一种确保
startup.init
不会被多次调用的方法是引入互斥锁来同步对那段代码

在您的情况下,我将首先引入一个要锁定的静态对象:

private static readonly object syncRoot = new object();
然后将代码的该部分包含在lock语句中:

lock (syncRoot)
{
    // only 1 thread ever enters here at any time.

    if (!initialized)
    {
        Startup.Init<SolrSearchResult>("http://Host:44416/solr");
        initialized = true;
        // no more threads can ever enter here.
    }
}

initialized
不需要变为
false
并且您不需要
Startup.Init
在以后的阶段再次运行时,无论出于何种原因,都可以使用此功能。否则,使用这个代码可能会遇到问题。

如果您的问题是并发性的,则应该考虑将调用同步到代码> init < /C>。很抱歉,你可以用一个简单的
@bizzies来实现这一点,但是你能再演示一下吗!我对这个有点陌生!谢谢你的帮助!
// check to see if its worth locking in the first place.
if (!initialized)
{
    lock (syncRoot)
    {
        // only 1 thread ever enters here at any time.

        if (!initialized)
        {
            Startup.Init<SolrSearchResult>("http://Host:44416/solr");
            initialized = true;
            // no more threads can ever enter here.
        }
    }
}