Domanda

Abbiamo un problema di interopera molto complicato in cui il filo utilizzato per inizializzare un sistema di 3a partito deve essere lo stesso thread utilizzato per terminarlo. In caso contrario ciò che si traduce in un deadlock. Stiamo eseguendo interopera da un servizio WCF ospitato in IIS. Attualmente questa pulizia è fatta in disposizione e normalmente funziona molto bene. Sfortunatamente, sotto il carico pesante IIS farà un rodato scarico e non riusciremo mai a smaltire. Possiamo spostare la logica di arresto in un finalizzatore critico ma che non aiuta dal momento che non abbiamo più accesso al filo inizializzato! A questo punto il nostro unico ricorso sembra aver notificato il CLR che l'AppDomain è ora probabile in uno stato corrotto. Tuttavia, non sono sicuro di come farlo (o se è anche possibile). Potrebbe essere che questa sia l'utilità dei contratti a livello di classe, ma ammetto che non capisco davvero quelli completamente.

EDIT: In alternativa, questo è possibile visualizzare come un problema di affinità del thread nel finalizer. Se qualcuno ha una soluzione intelligente a questo, sono tutte le orecchie :)

È stato utile?

Soluzione

Prova a dividere il codice che dipende da quella dipendenza nativa a un'applicazione di servizio di Windows autonomo, se possibile.Se non può funzionare bene con WCF / IIS, dovresti evitare i conflitti invece di combattere contro di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top