Является ли AppDomain хорошим способом обернуть плохую стороннюю библиотеку? - PullRequest
2 голосов
/ 09 ноября 2011

Я использую стороннюю библиотеку, которая поддерживает TCP-соединение с удаленным сервером и управляет протоколом связи. Иногда он теряет соединение, поэтому у меня есть поток, который отслеживает состояние соединения и пытается восстановить соединение. Обычно это может восстановить.

Проблема в том, что иногда вызовы Connect () никогда не возвращаются. Я перезапускаю процесс, он будет работать, поэтому я думаю, что в библиотеке происходит что-то глупое, либо тупик, либо какая-то статическая переменная переводится в странное состояние. Я декомпилировал код, но он слишком «креативный», чтобы его можно было понять.

Мне нужно написать это так, чтобы мне никогда не приходилось перезапускать процесс из-за этой сторонней библиотеки. Сама библиотека имеет 2 обратных вызова Action{T}. Является ли запуск библиотеки внутри собственного домена приложения хорошим выбором? Таким образом, если соединение обрывается и не перезагружается, я могу убить домен приложения и запустить новый. Какие соображения я должен сделать?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Зависшие темы очень проблематичны.Они неизменно зависают от некоего родного вызова, который Thread.Abort () не может достичь.Попытка выгрузить AppDomain не будет работать, если поток не может быть прерван.

Запуск кода в отдельном процессе - лучшее решение, вы всегда можете снять процесс с помощью Process.Kill ().Поговорите с ним что-то вроде WCF.

0 голосов
/ 09 ноября 2011

Ну, очевидно, вам нужно проверить, действительно ли это решает проблему. Если это так, то это достойная работа. Если все сторонние библиотеки управляются, я думаю, что ваш обходной путь подойдет.

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

...