Couchbase .net客户端卡在构造函数中

时间:2014-01-27 19:44:29

标签: .net couchbase

我创建了这个简单的应用程序

using System;
using System.Configuration;
using System.Threading;
using Couchbase;
using Couchbase.Configuration;

namespace SimpleCouchClientTest
{
    /// <summary>
    /// Simple couch client test
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            var connectionString = "http://localhost:8091/pools/";
            var bucketName = "testbucket";
            var bucketPassword = "testbucket";
            var numberOfLoops = 1000;

            for (var i = 0; i <= numberOfLoops; i++)
            {

                var config = new CouchbaseClientConfiguration
                {
                    Bucket = bucketName,
                    BucketPassword = bucketPassword,
                };

                config.Urls.Add(new Uri(connectionString));

                Console.WriteLine("Creating client #" + i);
                var couchClient = new CouchbaseClient(config);
                Console.WriteLine("Client #" + i + " created.");
                //Thread.Sleep(100); //-- uncomment this to run successfully
            }
        }
    }
}

numberOfLoops设置为1000,并且CouchbaseClient创建在第一个客户端之后挂起。我运行了WinDbg会话,我了解到客户端卡在BucketConfigListener.Start()上。

这是一个已知问题吗?有没有解决方法?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,最终弄明白了。我正在运行fiddler2来检查Web请求/响应的内容。但是,这干扰了bucketsStreaming URI。

一旦我关闭fiddler2并确保没有其他代理,它就可以正常工作。在尝试初始化构造函数之前,我还可以通过重新启动fiddler2来按需重现问题。

请告诉我这是否也是您的体验。

答案 1 :(得分:0)

通过创建多个客户端实例,不确定您要测试/实现的是什么?我不认为你应该创建这么多Couchbase客户端。它应该是一个服务于所有应用程序线程的客户端实例。

你应该移动“new CouchbaseClient(config);”在循环之外。

e.g。

var config = new CouchbaseClientConfiguration
{
  Bucket = bucketName,
  BucketPassword = bucketPassword,
};
config.Urls.Add(new Uri(connectionString));
Console.WriteLine("Creating one client for all my app needs");
var couchClient = new CouchbaseClient(config);
for (var i = 0; i <= numberOfLoops; i++)
{
  // use client to do your test operations get/set/etc
}