Как предотвратить или поймать Unable to run: socket is null от 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. . Но это исключение выбрасывается из этого нового потока, поэтому я не могу его поймать и обработать ошибку. Это просто крашит мое приложение.

Итак, у меня есть два вопроса. Во-первых, как предотвратить это? Я делаю что-то неправильно при подключении или повторном подключении? Во-вторых, можно ли это как-то отловить и снова попробовать подключиться?


person Matt    schedule 12.06.2017    source источник
comment
Без предоставления вашего кода входа и примера кода, который фактически вызывает это исключение, трудно дать какой-либо ответ, кроме как связать вас с исходным кодом AsterNet.   -  person Deantwo    schedule 19.06.2017
comment
github.com/AsterNET/ AsterNET/blob/master/Asterisk.2013/   -  person Deantwo    schedule 19.06.2017
comment
Если другим интересно: github.com/AsterNET/AsterNET/issues/107   -  person Deantwo    schedule 19.06.2017


Ответы (1)


Это происходило потому, что я пытался поддерживать связь сам, и мне не нужно было. Я написал цикл, чтобы время от времени проверять соединение и переподключаться, если оно обрывается, и отправлять пинги, чтобы поддерживать его в рабочем состоянии. Вы можете увидеть пример того, что я делал здесь:

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

Но мне не нужно было этого делать. Текущие версии AsterNet делают все это за вас. И когда я также пытался сделать это вручную, это мешало шагам, которые предпринимала библиотека. Итак, суть в том, что просто позвольте библиотеке AsterNet поддерживать ваше соединение за вас.

Вы можете увидеть мое обсуждение с сопровождающими здесь:

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

person Matt    schedule 30.06.2017