У нас есть сторонний dll, который используется в нашем веб-сервисе, размещенном в IIS6. Проблема заключается в том, что, как только эта DLL загружена в память, исключение AccessViolationException генерируется, если поток, отличный от того, который создал, пытается выполнить любой код внутри библиотеки DLL. Рабочий процесс является многопоточным, и каждый вызов веб-службы будет получать случайный поток из пула. Мы пытались выгружать его из памяти и перезагружать каждый раз, когда нам это было нужно, но я полагаю, что только внешний интерфейс является .Net, а остальное неуправляемо, поэтому он никогда не выгружается из памяти. Мы используем VB и .Net 2.0. Есть предложения?
(Ответ Робу Уокеру)
Мы думали о создании нового потока и использовании его для вызова библиотеки DLL, но как нам заставить поток сидеть и ждать вызовов? Как вы делегируете вызов потоку, не имея класса Dispatcher, предоставленного .Net 3.0? Создание скрытой формы и помещение ее в цикл сообщений может работать. И тогда мы можем вызвать метод Invoke () формы. Но я вижу много проблем, возникающих, если мы создаем форму внутри веб-службы IIS.