Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# 读取Zookeeper Solr中的活动节点_C#_Solr_Apache Zookeeper - Fatal编程技术网

C# 读取Zookeeper Solr中的活动节点

C# 读取Zookeeper Solr中的活动节点,c#,solr,apache-zookeeper,C#,Solr,Apache Zookeeper,我正在ASP.NETMVC4中为Solr编写一个前端,我想连接到Zookeeper并读取活动节点,然后连接到一个随机节点。为此,我编写了以下代码: public class zkResolver { private static readonly TimeSpan timeout = TimeSpan.FromSeconds(400); private const String LIVE_NODES_ZKNODE = "/live_nodes"; public Strin

我正在ASP.NETMVC4中为Solr编写一个前端,我想连接到Zookeeper并读取活动节点,然后连接到一个随机节点。为此,我编写了以下代码:

public class zkResolver
{
    private static readonly TimeSpan timeout = TimeSpan.FromSeconds(400);
    private const String LIVE_NODES_ZKNODE = "/live_nodes";
    public String ErrorMsg { get; set; }
    public static String getActiveInstance(String instanceUrl)
    {
        ZooKeeper zk = new ZooKeeper(instanceUrl, timeout, null);
        List<String> activeNodes = zk.GetChildren(LIVE_NODES_ZKNODE, false);
        Random rnd = new Random();
        int i = rnd.Next(0, activeNodes.Count - 1); //lets shuffle baby
        return activeNodes[i];
    }
}
公共类解析程序
{
私有静态只读TimeSpan超时=TimeSpan.FromSeconds(400);
私有常量字符串LIVE_NODES_ZKNODE=“/LIVE_NODES”;
公共字符串ErrorMsg{get;set;}
公共静态字符串getActiveInstance(字符串instanceUrl)
{
ZooKeeper zk=新的ZooKeeper(instanceUrl,超时,空);
List activeNodes=zk.GetChildren(LIVE_NODES_ZKNODE,false);
随机rnd=新随机();
int i=rnd.Next(0,activeNodes.Count-1);//让我们洗牌宝贝
返回activeNodes[i];
}
}

但是,当我运行它时,它返回-4(CONNECTIONLOSS),但是当我开始调试时,它返回正确的结果,知道吗,为什么吗?

好的,我已经解决了这个问题。ZooKeeper在ctor中具有异步连接,因此您必须等待它与smth连接,如下所示:

        while (zk.State == ZooKeeperNet.ZooKeeper.States.CONNECTING)
        {
            Thread.Sleep(TimeSpan.FromSeconds(1));
        }

我能知道如何在SOLRJ API中使用它吗@风喜欢你的洗牌!