Как предотвратить или поймать "Невозможно запустить: сокет пуст" из AsterNet?
Используя 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()
Вы можете увидеть строку, которая выдает это исключение, в коде AsterNet по адресу ManagerReader.cs, строка 197. Похоже, это происходит, когда connect() (в ManagerConnection.cs) запускает новый поток, но mrSocket каким-то образом равен null в ManagerReader.cs., Но это исключение выдается из этого нового потока, поэтому я не могу его перехватить и обработать ошибку. Это просто вылетает из моего приложения.
Итак, у меня есть два вопроса. Во-первых, как я могу предотвратить это? Я делаю что-то не так с тем, как я подключаюсь или переподключаюсь? Во-вторых, можно ли как-то это перехватить и попробовать снова подключиться?
1 ответ
Это происходило потому, что я пытался поддерживать связь сам, и мне не нужно было. Я написал цикл, чтобы периодически проверять соединение и переподключаться, если он сбрасывался, и посылать пинги, чтобы поддерживать его. Вы можете увидеть пример того, что я делал здесь:
https://gist.github.com/squaregear/80821130d221727c3836dba3224bf93e
Но мне не нужно было этого делать. Текущие версии AsterNet делают все это для вас. И когда я тоже пытался сделать это вручную, это мешало тому, что делала библиотека. Итак, суть в том, что библиотека AsterNet позволяет вам поддерживать ваше соединение.
Вы можете увидеть мое обсуждение с сопровождающими здесь: