使用 C# 的 Couchbase,"Bucket.Result" 大部分时间给出 "Fatal" 和 "Unexpected character encountered while parsing value: <"

Couchbase with C#, "Bucket.Result" gives "Fatal" and "Unexpected character encountered while parsing value: <" most of time

我是 Couchbase 的新手,想对数据库执行分组查询。我已经使用 C#.NET 创建了一个 MVC 应用程序。下面是代码片段:

var config = new ClientConfiguration
{
    Servers = new List<Uri>
  {
       new Uri("http://172.18.109.151:8091/pools"),
       new Uri("http://172.18.109.81:8091/pools"),
       new Uri("http://172.18.109.46:8091/pools"),
       new Uri("http://172.18.109.60:8091/pools"),
       new Uri("http://172.18.109.80:8091/pools")
  },
    UseSsl = false,
    DefaultOperationLifespan = 8100000,
    BucketConfigs = new Dictionary<string, BucketConfiguration>
                  {
                    {"NLA-testing", new BucketConfiguration
                    {
                      BucketName = "NLA-testing",
                      UseSsl = false,
                      Password = "",
                      DefaultOperationLifespan = uint.MaxValue,
                      PoolConfiguration = new PoolConfiguration
                      {
                        MaxSize = 10,
                        MinSize = 5,
                        SendTimeout = int.MaxValue, // this value wa
                      }
                    }}}
};

using (Cluster cls = new Cluster(config))
{
    using (var buc = cls.OpenBucket("NLA-testing"))
    {
        string AggQuery = "SELECT Status.StatusCode, Status.Detail, Status.Meaning, COUNT(*) AS count FROM `NLA-testing` where  (Status.StatusCode is not missing and Status.Detail is not missing and Status.Meaning is not missing)GROUP BY Status.StatusCode, Status.Detail, Status.Meaning";
        var AggResult = buc.Query<dynamic>(AggQuery);
        foreach (var row in AggResult.Rows)
        {
            if (row["StatusCode"] != null)
                datalist.Add(new StatusCount(Convert.ToInt32(row["StatusCode"]), Convert.ToInt32(row["count"]), row["Meaning"].ToString(), row["Detail"].ToString()));
        }
    }
}

下一行创建错误。 "QueryResult.Status" 给出 "Fatal" 并且 Exception 给出 "Unexpected character encountered while parsing value: <. Path '', line 0, position 0." 消息。

var AggResult = buc.Query(AggQuery);

更多信息如下图所示:

AggResult information

我不知道为什么会这样。我的配置是否遗漏了任何内容,或者我使用了错误的方式来执行查询?如果我多次 运行 代码,那么 "QueryResult.Status" 每 10 运行 秒给出一次 "Success"。

你能帮我解决一下吗?

谢谢

代理创建了一个问题,现在已经解决了。

我在服务器列表中列出了 5 个 IP 地址(在 ClientConfiguration 中)。该应用程序 运行 仅来自 172.18.109.151,具有代理设置。因此,当

var AggResult = buc.Query(AggQuery);

语句执行,它使用 http://172.18.109.XXX:8093/query 向上述 5 个列表中的任何一个查询服务发出请求(这里的 XXX 是 151,81,46,60,80 中的任何一个)。因此它给出错误 "Invalid Request" [HTTP/1.0 417 Expectation Failed whose content type is "text/html"].

我从执行查询的 PC 上删除了代理,它工作正常。 可以在以下位置找到更多讨论:Why C#.net query gives "FATAL" status most of the time? (forum.couchbase.com)

谢谢:)

Couchbase 配置为使用 http 80 端口查询视图,代理响应身份验证错误。 要解决此问题,您需要将 .NET 配置为在这种情况下不使用默认代理。这是在相关配置文件中完成的:

在我的项目中添加了以下内容 App.config 已经解决了我的问题:

  <system.net>
    <defaultProxy>
      <proxy usesystemdefault="False" />
    </defaultProxy>
  </system.net>