2010-03-27 15 views
5

Ho scritto un servizio Windows in .Net e voglio esporre le classi per essere chiamate da un altro codice .Net. Nello specifico, ho un'API che voglio esporre tramite una DLL che verrà inserita nel GAC e voglio che la DLL nel GAC utilizzi le classi del servizio Windows .Net. Ho bisogno di questa architettura in quanto il codice nel servizio di Windows deve essere eseguito come un altro utente/account come il chiamante dell'API (l'account verrebbe creato al momento dell'installazione).Exposing a .Net Service

Il mio piano era di esporre le classi di servizio di Windows tramite COM (regasm.exe per la registrazione e tlbexp.exe per creare la libreria dei tipi), quindi chiamare le classi nel GAC DLL tramite COM (importato tramite tlbimp.exe) . Tuttavia ottengo il seguente errore da tlbimp:

TlbImp: TI0000 errore: System.Runtime.InteropServices.COMException - Type Library '' è stato esportato da un assembly CLR e non può essere ri importato come un assembly CLR.

Ciò implica che il mio metodo non funzionerà facilmente. Posso solo pensare che potrei aver bisogno di una DLL C++ come un ponte per la mia DLL GAC per richiamare le chiamate COM, ma questa sembra una soluzione sgradevole.

Sono fondamentalmente in cerca di suggerimenti. Qualcuno sa come esporre le classi di un servizio Windows scritto in .Net su un altro codice .Net?

risposta

0

vorrei mettere tutta la logica di servizio di Windows in una DLL separata (egxdll). Definire un'interfaccia per le classi in x.dll. Aggiungi riferimento sia nel servizio Windows che nell'altro progetto .Net al progetto di x.dll. In questo modo puoi ottenere la riusabilità.