使用 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);
更多信息如下图所示:
我不知道为什么会这样。我的配置是否遗漏了任何内容,或者我使用了错误的方式来执行查询?如果我多次 运行 代码,那么 "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>
我是 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);
更多信息如下图所示:
我不知道为什么会这样。我的配置是否遗漏了任何内容,或者我使用了错误的方式来执行查询?如果我多次 运行 代码,那么 "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>