2011-11-08 7 views

risposta

22

Questa è una risposta scaduta a per la domanda. ma lascia che ti spieghi le differenze di cui sono a conoscenza.

Per comprendere ciò, è necessario evocare le differenze tra un'applicazione COM e un'applicazione COM +.

Registrare i tipi come COM - Crea oggetto su richiesta ogni volta che un codice tenta di inizializzare l'oggetto

Registrare i tipi di applicazione COM + - Crea oggetto, supporta il pool di oggetti, supporta le transazioni, supporta avanzata di Windows sicurezza e altro.

Per comprendere il pool, prendo a prestito una risposta da http://www.tek-tips.com/viewthread.cfm?qid=116249

COM 's principale metodo di aggiunta di scalabilità e prestazioni avviene attraverso il pool di oggetti +. Sfortunatamente, questo richiede un componente a thread libero, che è qualcosa che VB6 non può fare. Ma ... .NET (qualsiasi lingua) e C++ possibile.

Che tipo di pool di oggetti fa è dire a MTS/COM + di creare un pool di oggetti disponibili, da un minimo che viene creato all'avvio di COM +, ad un massimo (che non so se è un limite massimo, o se è flessibile). Ciò che il pool fa per te è fornire un chiamante con un oggetto preinizializzato. Questo è molto più veloce dell'attesa per la creazione di un oggetto (specialmente su una rete). Il chiamante si collega all'oggetto, effettua chiamate al metodo e si disconnette. L'oggetto quindi torna in piscina.

Si richiede un cambiamento fondamentale nell'architettura del programma. Prima di COM +, tutti aprivano una connessione a un database e lo lasciavano aperto per tutta la durata dell'applicazione. Questo era OK quando la popolazione di utenti era < 100, poiché il carico sul server era gestibile (ogni connessione occupa RAM). Ma per grandi popolazioni o quantità sconosciute di utenti (ad esempio utenti di Internet), il server del database viene sovraccaricato rapidamente. Qualcuno si è reso conto che ogni utente transazionale stava effettivamente facendo un vero lavoro una piccola percentuale del tempo - il resto del tempo in cui erano inattivi.

Quindi i programmi devono stabilire una connessione, effettuare una richiesta, ottenere i risultati e quindi disconnettersi (ciò vale anche per gli oggetti non di database). Ciò implica anche che l'applicazione sia senza stato (lo stato del programma non viene mantenuto tra le richieste). Perché ... l'oggetto che stai attualmente utilizzando apparteneva a qualcun altro 200 millisecondi fa. E quando usi l'oggetto, un altro utente lo userà dopo di te. Quindi gli oggetti non possono mantenere alcuna informazione in giro - devono essere solo codice.

regasm - Registra una tipi assembly .NET come COM. Ciò significa che il regasm seleziona i tipi esposti pubblicamente del tuo .Net assembly e quindi scrive voci di registro appropriate su HKCR ....; (che è il modo in cui regsvr32 funziona).

  • regasm può generare un file TLB per voi (proprio come Tlbexp.exe)
  • regasm può codebase vostro assembly .NET. Ciò significa che se non si dispone dell'assembly .Net in GAC, è possibile creare una base di codice COM nel percorso del file in cui è presente l'assembly .Net. E da qui il COM Marshaller sceglierà eseguire l'assemblea con CLR.
  • regasm consente di creare un file .reg facendo doppio clic su cui è possibile aggiornare le voci del registro. è necessario assicurarsi che l'assembly .NET viene installato nella GAC ​​becase/interruttore regfile in regasm non consente a/codebase (se lo fa base di codice, allora è privo di significato)

regsvcs - Crea un COM + Applicazione da un assembly .Net. Ciò significa che regsvcs preleva i tipi esposti pubblicamente del tuo .Net assembly e oltre a scrivere le voci di registro appropriate, crea anche un'applicazione COM + che è possibile gestire tramite la console di Gestione componenti di Servizi (% systemroot% \ system32 \ comexp.msc).

  • regsvcs crea un COM + applicazione sulla base delle informazioni passate ad esso dalla riga di comando, o sulla base delle informazioni avaialble dalla DLL .Net.

  • regsvcs consente di unire i tipi COM + a un'applicazione COM + esistente. Date un'occhiata a comexp.msc per attraversare per capire un'applicazione COM + e COmponet che gestisce un COM +.

Se si scrive una classe C# con ComVisible (true) -> I tipi pubblici di questa classe (Foo) è pronto per essere registrato con un regasm per COM.

// Set the COM visibility attribute to true 
[ComVisibleAttribute(true)] 
public class Foo{....} 

se si scrive una classe C# con ComVisible (vero), che eredita da System.EnterpriseServices.ServicedComponent (e più impostazione ovviamente ..) -> Questa classe (FooBar) è pronto per essere registrato come un'applicazione COM +.

// Set the COM visibility attribute to true 
[ComVisibleAttribute(true)] 
    public class FooBar: System.EnterpriseServices.ServicedComponent{.....} 

Creazione di un'applicazione COM + da .Net - È possibile iniziare da qui. Ricorda che COM + fornisce una gestione avanzata della transazione per un oggetto esposto COM.

http://support.microsoft.com/kb/306296 http://my.execpc.com/~gopalan/dotnet/complus/complus.net_accountmanager.html http://www.codeproject.com/Articles/3845/Creating-COM-Objects-using-EnterpriseServices-in-N

+2

Questa è la migliore descrizione della differenza tra '' regasm' e regsvcs'. Grazie per quello! :) –

Problemi correlati