2012-03-12 10 views
6

Abbiamo un problema di interoperabilità molto complesso in cui il thread utilizzato per inizializzare un sistema di terze parti deve essere lo stesso thread utilizzato per terminarlo. In caso contrario, si verificherà un deadlock. Stiamo eseguendo l'interoperabilità da un servizio WCF ospitato in IIS. Attualmente questa pulizia è a disposizione e normalmente funziona molto bene. Sfortunatamente, sotto carico pesante IIS eseguirà uno scarico maleducato e non potremo mai chiamare il dispose. Possiamo spostare la logica di spegnimento in un finalizzatore critico, ma ciò non aiuta poiché non abbiamo più accesso al thread di inizializzazione! A questo punto, la nostra unica richiesta sembra essere la notifica al CLR che l'AppDomain è ora probabilmente in uno stato danneggiato. Tuttavia, non sono sicuro di come farlo (o se è anche possibile). Può essere che questa sia l'utilità dei contratti a livello di classe, ma ammetto che non li capisco veramente.È possibile utilizzare CER per garantire che la finalizzazione non venga mai chiamata?

MODIFICA: In alternativa, questo può essere visualizzato come problema di affinità del thread nel finalizzatore. Se qualcuno ha una soluzione intelligente, io sono tutto orecchie :)

+0

Il componente con cui si ha a che fare è nativo o gestito? – JaredPar

+0

Nativo. È un sistema per la gestione della memoria, ecc. – Jeff

risposta

1

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

+0

Sì, potresti avere ragione. Ne abbiamo parlato anche se sono riluttante a cedere ancora :) – Jeff

+0

Inoltre, avrei dovuto dire - non sono sicuro che questo risolva effettivamente il problema poiché gli scarichi CLR sono probabilmente un dato di fatto (anche se meno probabile in la tua soluzione, ne sono sicuro). – Jeff

+0

Intendi dire che ti senti male per lo scaricamento dell'applicazione? È in base alla progettazione, poiché il pool di applicazioni verrà riciclato periodicamente (apprendi le impostazioni) e anche ASP.NET si riavvia, http://stackoverflow.com/questions/829392/how-to-discover-the-reason-of- asp-net-application-restart –

Problemi correlati