Wir haben eine Drittanbieter-DLL, die in unserem Web-Service in IIS6 verwendet wird. Das Problem ist, dass die Ausnahme AccessViolationException einmal ausgelöst wird, wenn diese DLL in Arbeitsspeicher geladen wird, wenn ein Thread, der anders als der erstellt wird, versucht, Code innerhalb der DLL auszuführen. Der Worker-Prozess ist multi-threaded und jeder Aufruf an den Webdienst wird einen zufälligen Thread aus dem Pool abrufen. Wir haben versucht, es aus dem Speicher zu entladen und es jedes Mal neu zu laden, wenn wir es brauchten, aber ich denke, nur das Frontend ist .Net und der Rest ist nicht verwaltet, so dass es nie wirklich komplett aus dem Speicher entladen wird. Wir verwenden VB und .Net 2.0. Irgendwelche Vorschläge?Wie kann sichergestellt werden, dass derselbe Thread zum Ausführen von Code in IIS verwendet wird?
(Antwort auf Rob Walker)
Wir dachten über einen neuen Thread erstellen und verwendet es die DLL zu rufen, aber wie machen wir das Gewinde sitzt und für Anrufe warten? Wie delegiert Sie den Aufruf an den Thread, ohne dass die Dispatcher-Klasse von .Net 3.0 bereitgestellt wird? Es könnte funktionieren, ein verborgenes Formular zu erstellen und es in eine Nachrichtenschleife einzufügen. Und dann könnten wir die Invoke() - Methode des Formulars aufrufen. Ich kann jedoch viele Probleme feststellen, wenn wir ein Formular in einem von IIS gehosteten Webdienst erstellen.