1

使用 AsterNet 连接到 Asterisk,我看到了以下内容:

Unhandled Exception:

System.SystemException: Unable to run: socket is null.
at AsterNET.Manager.ManagerReader.Run() in
e:\Projects\Github\AsterNET\Asterisk.2013\Asterisk.NET\Manager\ManagerReader.cs:line 197
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback,
Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state,
Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

您可以在 ManagerReader.cs 的第 197 行的 AsterNet 代码中看到引发此异常的行。看起来当 connect()(在 ManagerConnection.cs 中)启动一个新线程时会发生这种情况,但在 ManagerReader.cs 中 mrSocket 不知何故为空. 但是这个异常是从那个新线程中抛出的,所以我无法捕获它并处理错误。它只是让我的应用程序崩溃。

所以我有两个问题。首先,如何防止这种情况发生?我在连接或重新连接的方式上做错了吗?其次,是否有可能以某种方式捕获它并再次尝试连接?

4

1 回答 1

0

发生这种情况是因为我试图自己保持连接,而我不必这样做。我写了一个循环来经常检查连接,如果它掉线并重新连接并发送 ping 以使其保持活动状态。你可以看到我在这里做的一个例子:

https://gist.github.com/squaregear/80821130d221727c3836dba3224bf93e

但我不需要这样做。当前版本的 AsterNet 为您完成了所有这些工作。当我也尝试手动执行此操作时,它干扰了图书馆正在采取的步骤。所以底线是,让 AsterNet 库为您维护您的连接。

你可以在这里看到我与维护者的讨论:

https://github.com/AsterNET/AsterNET/issues/107

于 2017-06-30T11:52:48.640 回答