【发布时间】:2015-08-11 18:43:49
【问题描述】:
我最近遇到了这个异常,我不知道为什么。 2天前一切都很好,我完全不知道现在发生了什么。 现在我知道这是空异常,但又一次 - 不明白为什么。它出现在“使用(var stream = service.Oneshot(oneshotQuery, outArgs))”上。 service.Oneshot 和 outArgs 都不为空。我唯一想到的是“流”,但为什么呢?
不难看出我在 c# 方面相对较新。
异常消息框显示:
System.NullReferenceException:对象引用未设置为实例 的一个对象。在 Splunk.Service.VersionCompare(String right) 在 Splunk.Service.SetSegmentationDefault(Args& args) 在 Splunk.Service.Oneshot(字符串查询,Args inputArgs)在 Transkrypter_2.0.Form1.Form1_Load(Object sender, EventArgs e) in c:...\Form1.cs:第 45 行
第 45 行是“使用 (var stream = service.Oneshot(oneshotQuery, outArgs))”
感谢您的帮助:
using Splunk;
private void Form1_Load(object sender, EventArgs e)
{
try
{
var connect = new ServiceArgs
{
Host = "myip",
Port = 8089,
Scheme = "https"
};
Splunk.Service service = new Splunk.Service(connect);
var oneshot = new Splunk.Client.JobArgs();
//oneshot.EarliestTime = "2015-08-09 10:25:00";
//oneshot.LatestTime = "2015-08-09 11:25:00"
String oneshotQuery = "search * | head 10";
var outArgs = new JobResultsArgs
{
OutputMode = JobResultsArgs.OutputModeEnum.Xml,
Count = 0,
};
using (var stream = service.Oneshot(oneshotQuery, outArgs))
{
using (var rr = new ResultsReaderXml (stream))
{
foreach (var @event in rr)
{
richTextBox1.Text += "Event:" + Environment.NewLine;
foreach (string key in @event.Keys)
{
richTextBox1.Text += " " + key + " -> " + @event[key];
}
}
}
}
button1.BackColor = Color.Green;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString() ,ex.Message.ToString());
}
另外我想提一下,这是第二个应用程序,只是为了测试这个错误,这里和我的主应用程序一样发生了同样的异常。
【问题讨论】:
-
我怀疑 outArgs 的成员尚未初始化。你能提供类型 JobResultArgs 的定义吗?
-
Splunk.Service.Oneshot() 方法内部发生异常,因此如果没有看到该代码,很难提供太多帮助。您是否能够在该方法中设置断点并逐步查看失败的确切位置?假设您拥有 Splunk.Service 的代码,并且它不是第 3 方 dll。如果是这样,变量“服务”上是否有任何属性表明它是否已连接,您可以检查它,因为一种猜测是连接没有建立。
-
JobResultArgs 的定义在here 至于第3方dll - 使用Visual Studio 13你只需要下载NuGets Splunk SDK,这就是我正在使用的,所以对我来说很难从中获取更多信息。但我可以肯定地说,这种连接是稳定的,因为我试图找出每个元素。我觉得这个问题很愚蠢,因为它很简单,但实际上没有更多选择了。已联系 splunk 支持,但尚未得到答复。
-
这里的代码家伙:github.com/splunk/splunk-sdk-csharp/blob/…。另请注意,这是 v1 C# SDK。 V2 更酷,并且是异步的。 dev.splunk.com/csharp
-
@NigelK 有点正确。我只是忘了在
Splunk.Service service = new Splunk.Service(connectArgs);之后添加service.Login("login", "password");,我发现只有这一点,但上面的代码只是让它更明显——愚蠢的我。一个唯一的谜团:它以前是如何工作的......;)所以,是的,话题结束了,非常感谢大家的帮助!