In questa paginaObiettiviIl modulo consente di: | • | Ospitare in un servizio di Windows un oggetto che può essere reso remoto. | | • | Accedere a un oggetto remoto da un'applicazione client utilizzando un canale TCP. |
Ambito di applicazioneLe informazioni contenute in questo modulo sono valide per i seguenti prodotti e tecnologie: | • | Sistema operativo Microsoft Windows XP o Windows 2000 Server con Service Pack 3 e versioni successive | | • | Microsoft .NET Framework versione 1.0 con Service Pack 2 e versioni successive | | • | Microsoft Visual Studio® 1.0 .NET e versioni successive | | • | Microsoft Visual C#® .NET |
Utilizzo del moduloPer trarre il massimo vantaggio dal modulo: | • | È necessario aver acquisito esperienza nella programmazione con Visual C# .NET. | | • | È necessario aver acquisito esperienza nell'utilizzo dell'ambiente di sviluppo Visual Studio .NET. | | • | È necessario aver acquisito esperienza nello sviluppo e nell'implementazione dei servizi Windows. | | • | È necessario conoscere la procedura di creazione degli account utente di Windows mediante l'utilizzo degli strumenti di amministrazione di Windows. |
RiepilogoGli oggetti remoti creati mediante la funzionalità Microsoft® .NET Framework Remoting devono essere ospitati nei servizi di Microsoft Windows®, negli eseguibili personalizzati o in ASP.NET affinché possano essere accessibili alle applicazioni client. In questo modulo viene descritto come ospitare un oggetto remoto in un servizio di Windows e chiamarlo da un'applicazione client. Conoscenze necessariePrima di utilizzare questo modulo, tenere presente quanto segue: | • | Gli oggetti remoti, ovvero oggetti .NET ai quali si accede in modalità remota mediante la tecnologia .NET Remoting, possono essere ospitati nei servizi di Windows, negli eseguibili personalizzati o in ASP.NET. | | • | I client comunicano con gli oggetti remoti ospitati negli eseguibili personalizzati o nei servizi di Windows utilizzando il canale TCP. | | • | Per comunicare con gli oggetti remoti ospitati in ASP.NET, i client utilizzano invece il canale HTTP. | | • | Se il problema principale è la protezione, ospitare gli oggetti in ASP.NET e utilizzare il canale HTTP. In questo modo, sarà possibile sfruttare i vantaggi offerti dalle funzionalità di protezione sottostanti di ASP.NET e IIS. Per informazioni sulle procedure di hosting di un oggetto remoto in ASP.NET con IIS, vedere l'articolo 312107 "HOW TO: Host a Remote Object in Microsoft Internet Information Services" della Microsoft Knowledge Base all'indirizzo seguente: http://support.microsoft.com/default.aspx?scid=312107 (in inglese). | | • | Se il problema principale sono le prestazioni, ospitare gli oggetti in un servizio di Windows e utilizzare il canale TCP. Questa opzione non assicura alcuna protezione incorporata. |
Creazione della classe di oggetti remotiQuesta procedura consente di creare una semplice classe di oggetti remoti mediante un singolo metodo denominato Add che somma due numeri e restituisce il risultato. | • | Per creare una classe di oggetti remoti 1. | Avviare Visual Studio .NET e creare un nuovo progetto Libreria di classi Visual C# denominato RemoteObject. | 2. | Utilizzare Esplora soluzioni per rinominare class1.cs come Calculator.cs. | 3. | In Calculator.cs rinominare Class1 come Calculator e rinominare di conseguenza in modo appropriato il costruttore predefinito. | 4. | Derivare la classe Calculator da MarshalByRefObject per renderla remota.
public class Calculator : MarshalByRefObject
| 5. | Aggiungere alla classe Calculator il seguente metodo pubblico:
public int Add( int operand1, int operand2 )
{
return operand1 + operand2;
}
| 6. | Scegliere Genera soluzione dal menu Genera. |
|
Creazione di un'applicazione host di servizio di WindowsQuesta procedura consente di creare un'applicazione di servizio di Windows che verrà utilizzata per ospitare l'oggetto remoto. All'avvio del servizio, il canale remoto TCP verrà configurato per ricevere le richieste del client. Nota: in questa procedura, il servizio di Windows viene installato utilizzando una classe Installer e l'utilità della riga di comando Installutil.exe. Per disinstallare il servizio, eseguire Installutil.exe con l'opzione /u. In alternativa, per installare e disinstallare il servizio di Windows è possibile utilizzare un progetto di installazione e distribuzione. | • | Per creare un'applicazione host di servizio di Windows 1. | Aggiungere alla soluzione corrente un nuovo progetto di servizio di Windows Visual C# denominato RemotingHost. | 2. | Utilizzare Esplora soluzioni per rinominare Service1.cs come RemotingHost.cs. | 3. | In RemotingHost.cs rinominare la classe Service1 come HostService e rinominare di conseguenza in modo appropriato il costruttore predefinito. | 4. | All'inizio del file, aggiungere la seguente istruzione using sotto le istruzioni using esistenti.
using System.Runtime.Remoting;
| 5. | Individuare il metodo Main e sostituire la riga di codice esistente che inizializza la variabile ServicesToRun con la seguente riga:
ServicesToRun = new System.ServiceProcess.ServiceBase[] {
new HostService() };
| 6. | Individuare il metodo InitializeComponent e impostare la proprietà ServiceName su RemotingHost.
this.ServiceName = "RemotingHost";
| 7. | Individuare il metodo OnStart e aggiungere la riga di codice riportata di seguito per la configurazione del servizio remoto. Il percorso completo del file di configurazione verrà passato al servizio come parametro di avvio.
RemotingConfiguration.Configure(args[0]);
| 8. | Aggiungere un nuovo file di classe C# al progetto e assegnargli il nome HostServiceInstaller. | 9. | Aggiungere un riferimento all'assembly nell'assembly System.Configuration.Install.dll. | 10. | Aggiungere all'inizio di HostServiceInstaller le istruzioni using riportate di seguito, sotto l'istruzione using esistente.
using System.ComponentModel;
using System.ServiceProcess;
using System.Configuration.Install;
| 11. | Derivare la classe HostServiceInstaller dalla classe Installer.
public class HostServiceInstaller : Installer
| 12. | Aggiungere l'attributo RunInstaller a livello di classe come indicato di seguito.
[RunInstaller(true)]
public class HostServiceInstaller : Installer
| 13. | Aggiungere le due variabili membro private riportate di seguito alla classe HostServiceInstaller. Gli oggetti verranno utilizzati durante l'installazione del servizio.
private ServiceInstaller HostInstaller;
private ServiceProcessInstaller HostProcessInstaller;
| 14. | Aggiungere il codice riportato di seguito al costruttore della classe HostServiceInstaller.
HostInstaller = new ServiceInstaller();
HostInstaller.StartType = System.ServiceProcess.ServiceStartMode.Manual;
HostInstaller.ServiceName = "RemotingHost";
HostInstaller.DisplayName = "Calculator Host Service";
Installers.Add (HostInstaller);
HostProcessInstaller = new ServiceProcessInstaller();
HostProcessInstaller.Account = ServiceAccount.User;
Installers.Add (HostProcessInstaller);
| 15. | In Esplora soluzioni fare clic con il pulsante destro del mouse su RemotingHost, selezionare Aggiungi, quindi fare clic su Aggiungi nuovo elemento. | 16. | Nell'elenco Modelli fare clic su File di testo e assegnare il nome app.config al file. Durante il processo di generazione, i file di configurazione denominati app.config vengono copiati automaticamente da Visual Studio .NET nella cartella di output (ad esempio, <directoryprogetto>\bin\debug) e rinominati <nomeapplicazione>.config. | 17. | Fare clic su OK per aggiungere il nuovo file di configurazione. | 18. | Aggiungere gli elementi di configurazione riportati di seguito al nuovo file di configurazione.
<configuration>
<system.runtime.remoting>
<application name="RemoteHostService">
<service>
<wellknown type="RemoteObject.Calculator, RemoteObject"
objectUri="RemoteObject.Calculator" mode="Singleton" />
</service>
<channels>
<channel ref="tcp" port="8085">
<serverProviders>
<formatter ref="binary" />
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>
| 19. | Scegliere Genera soluzione dal menu Genera. |
|
Creazione di un account di Windows per eseguire il servizioQuesta procedura consente di creare un account di Windows utilizzato per eseguire il servizio di Windows. | • | Per creare un account di Windows per eseguire il servizio 1. | Creare un nuovo account utente locale denominato RemotingAccount. Immettere una password e selezionare la casella di controllo Nessuna scadenza password. | 2. | Nel gruppo di programmi Strumenti di amministrazione fare clic su Criteri di protezione locali. | 3. | Utilizzare lo strumento Criteri di protezione locali per assegnare il privilegio Accesso come servizio al nuovo account. |
|
Installazione del servizio di WindowsQuesta procedura consente di installare il servizio di Windows mediante l'utilità installutil.exe e di avviare quindi il servizio. | • | Per installare il servizio di Windows 1. | Aprire una finestra di comando e modificare la directory impostandola sulla cartella Bin\Debug sotto la cartella del progetto RemotingHost. | 2. | Eseguire l'utilità installutil.exe per installare il servizio.
installutil.exe remotinghost.exe
| 3. | Nella finestra di dialogo Impostazione informazioni di accesso del servizio immettere il nome utente e la password dell'account creato nella procedura precedente e fare clic su OK. Visualizzare l'output dall'utilità installutil.exe e verificare che il servizio sia installato correttamente. | 4. | Copiare l'assembly RemoteObject.dll nella directory di output del progetto RemotingHost, ovvero RemotingHost\Bin\Debug. | 5. | Dal gruppo di programmi Strumenti di amministrazione avviare lo snap-in MMC Servizi. | 6. | Nell'elenco Servizi fare clic con il pulsante destro del mouse su Calculator Host Service, quindi scegliere Proprietà. | 7. | Immettere il percorso completo del file di configurazione del servizio (remotinghost.exe.config) nel campo Parametri di avvio. Nota: un metodo rapido per eseguire tale operazione consiste nel selezionare il campo Percorso file eseguibile, copiarlo e incollarlo nel campo Parametri di avvio. Quindi aggiungere la stringa ".config". | 8. | Fare clic su Avvia per avviare il servizio. | 9. | Verificare che lo stato del servizio venga modificato in Avviato. | 10. | Scegliere OK per chiudere la finestra di dialogo Proprietà. |
|
Creazione di un'applicazione client di provaQuesta procedura consente di creare un'applicazione console di prova utilizzata per chiamare l'oggetto remoto all'interno del servizio di Windows. | • | Per creare un'applicazione client di prova 1. | Aggiungere alla soluzione corrente una nuova applicazione console Visual C# denominata RemotingClient. | 2. | In Esplora soluzioni fare clic con il pulsante destro del mouse su RemotingClient, quindi fare clic su Imposta come progetto di avvio. | 3. | Aggiungere un riferimento all'assembly nell'assembly System.Runtime.Remoting.dll. | 4. | Aggiungere un riferimento al progetto nel progetto RemoteObject. | 5. | Aggiungere le seguenti istruzioni using all'inizio di class1.cs, sotto le istruzioni using esistenti.
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteObject;
| 6. | Aggiungere il codice di prova riportato di seguito al metodo Main per chiamare e richiamare l'oggetto Calculator ospitato dal servizio di Windows.
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan);
Calculator calc = (Calculator)Activator.GetObject(
typeof(RemoteObject.Calculator),
"tcp://localhost:8085/RemoteObject.Calculator");
if (calc == null)
System.Console.WriteLine("Could not locate server");
else
Console.WriteLine("21 + 21 is : " + calc.Add(21,21) );
| 7. | Scegliere Genera soluzione dal menu Genera. | 8. | Eseguire l'applicazione client e verificare che nella finestra di output della console venga visualizzato il risultato corretto. |
|
Altre risorsePer informazioni sulle procedure di hosting di un oggetto remoto in ASP.NET con IIS, vedere l'articolo 312107 "HOW TO: Host a Remote Object in Microsoft Internet Information Services" della Microsoft Knowledge Base all'indirizzo seguente: http://support.microsoft.com/default.aspx?scid=312107 (in inglese).
| |