Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo esempio viene illustrato come esporre un'interfaccia da un'applicazione COM+ come un servizio di Windows Communication Foundation (WCF) e come chiamarla da un client di WCF. Questo esempio è costituito da un programma di console client (.exe) e da un'applicazione di libreria di Enterprise Services (.dll) registrate all'interno di COM+. Questo esempio si basa sull'esempio Esempio della guida introduttiva che implementa un servizio di calcolatrice ed è simile all'esempio Integrazione COM+ ospitata da Web. Utilizzando la modalità di hosting COM+ e il trasporto TCP, in questo esempio viene descritto un approccio con prestazioni migliori rispetto all'esempio Integrazione COM+ ospitata da Web, ma che richiede che l'applicazione COM+ sia attivata in modo esplicito prima che possa elaborare richieste.
Nota
La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine dell'argomento.
L'applicazione di Enterprise Services contiene un solo componente che implementa una sola interfaccia ICalculator che espone metodi matematici (addizione, sottrazione, moltiplicazione e divisione).
// Define the component's interface.
public interface ICalculator
{
double Add(double n1, double n2);
double Subtract(double n1, double n2);
double Multiply(double n1, double n2);
double Divide(double n1, double n2);
}
Questa interfaccia viene esposta come un contratto del servizio che definisce il modello di comunicazione request/reply. Il client esegue richieste sincrone a un'operazione matematica e il servizio e il componente sottostante rispondono fornendo il risultato. L'attività del client è visibile nella finestra della console.
Il servizio è ospitato in-process con COM+ e l'applicazione ServiceModelHostedSample deve essere avviata manualmente per attivare gli endpoint del servizio. L'implementazione della classe ESCalculatorService calcola e restituisce il risultato appropriato.
// Supporting implementation for the ICalculator interface.
public class ESCalculatorService : ServicedComponent, ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
Nota
La classe non comprende codici ServiceModel specifici ed è un assembly Enterprise Services tipico dotato degli attributi di Enterprise Services, firmato e aggiunto alla cache di assembly globale (GAC).
Lo strumento COM+ Service Model Configuration Tool (ComSvcConfig.exe) viene utilizzato per aggiungere un servizio che supporti l'interfaccia selezionata. Il codice seguente viene utilizzato per eseguire questa operazione:
ComSvcConfig.exe /install /application:ServiceModelHostedSample /contract:"ServiceModelHostedSample.ESCalculator,ICalculator" /hosting:complus /mex /verbose
In questo caso, lo strumento aggiunge un servizio per l'interfaccia ICalculator del componente ServiceModelHostedSample.ESCalculator che si trova all'interno dell'applicazione ServiceModelHostedSample. Il servizio è ospitato all'interno di COM+, con un endpoint di scambio metadati. Un componente ServiceModelInitializer viene aggiunto all'applicazione per facilitare l'integrazione e un file di configurazione dell'applicazione viene generato nella directory principale dell'applicazione COM+. Per questa applicazione, è "%PROGRAMMI%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}\". All'avvio dell'applicazione, il componente ServiceModelInitializer controlla il file di configurazione dell'applicazione e avvia gli endpoint del servizio configurati in modo appropriato.
Per i servizi in modalità di hosting COM+, lo strumento COM+ Service Model Configuration Tool (ComSvcConfig.exe) crea endpoint del servizio utilizzando netNamedPipeBinding, che garantisce solo l'accesso sullo stesso computer. Il file di configurazione deve essere modificato ulteriormente per fornire endpoint su altri trasporti. Questo esempio utilizza un file di configurazione personalizzato che espone l'applicazione su TCP e HTTP utilizzando le associazioni netTcpBinding e wsHttpBinding:
<!-- Specify the service (application and component GUIDs) and service and MEX endpoints -->
<services>
<service behaviorConfiguration="ComServiceMexBehavior"
name="{4CDCDB2C-0B19-4534-95CD-FBBFF4D67DD9},{C2B84940-AD54-4A44-B5F7-928130980AB9}">
<endpoint
address="ICalculator"
binding="netTcpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="{8803CCEC-4DFB-49a7-925B-60025C32E5CD}" />
<endpoint
address="ICalculator"
binding="wsHttpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="{8803CCEC-4DFB-49a7-925B-60025C32E5CD}" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<!-- Specify base addresses for both transports -->
<baseAddresses>
<add baseAddress="net.tcp://localhost:8081/ServiceModelHostedSample" />
<add baseAddress="https://localhost:8082/ServiceModelHostedSample" />
</baseAddresses>
</host>
</service>
</services>
In questo esempio, il file di configurazione personalizza anche il nome e lo spazio dei nomi per il servizio e può essere utilizzato per esporre solo un sottoinsieme delle operazioni offerte dal componente. In questo caso, il metodo Divide è stato impostato come commento e omesso dal contratto del servizio esposto:
<!-- comContract specifying the name, namespace and methods for the service -->
<comContracts>
<comContract
contract="{8803CCEC-4DFB-49a7-925B-60025C32E5CD}"
name="ICalculator"
namespace="https://microsoft.com/Microsoft.ServiceModel.Samples/EnterpriseServicesHosted"
requiresSession="true">
<exposedMethods>
<add exposedMethod="Add" />
<add exposedMethod="Subtract" />
<add exposedMethod="Multiply" />
<!-- <add exposedMethod="Divide" /> -->
</exposedMethods>
</comContract>
</comContracts>
Il client comunica in un contratto utilizzando un client generato dallo strumento Service Metadata Utility Tool (Svcutil.exe). Il client è contenuto nel file generatedClient.cs con una configurazione compatibile in App.config. Questa utilità recupera i metadati per un servizio e genera un client utilizzato per comunicare in un tipo di contratto. Il servizio ospitato deve essere disponibile per generare il codice client, perché viene utilizzato per recuperare i metadati del servizio. Eseguire il comando seguente da un prompt dei comandi nella directory del client per generare il proxy tipizzato:
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost:8082/ServiceModelHostedSample/mex /out:generatedClient.cs /config:App.config
L'implementazione del client crea un'istanza del client generato utilizzando la configurazione di associazione TCP. Può quindi essere utilizzata per avviare la comunicazione con il servizio.
// Create a client.
CalculatorClient client = new CalculatorClient("NetTcpBinding_ICalculator ");
WSHttpBinding_ICalculator
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Viene illustrato l'utilizzo del servizio di WCF generato da un client di WCF. Premere INVIO nella finestra del client per arrestare il client.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Press <ENTER> to terminate client.
Per impostare e compilare l'esempio
Assicurarsi di aver eseguito Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation. Il processo di generazione include l'esecuzione di uno script che crea l'applicazione COM+ e la contrassegna con "Continua l'esecuzione anche in caso di inattività del sistema". Questo impedisce che l'endpoint del servizio venga automaticamente arrestato a causa dell'inattività.
Da un prompt dei comandi, spostarsi alla cartella service\bin dell'esempio. Se si utilizza Windows Vista o Windows Server 2008 assicurarsi di eseguire il prompt dei comandi come amministratore.
Immettere gacutil.exe /i ESCalculatorHosted.dll per aggiungere l'assembly alla cache di assembly globale (GAC). Assicurarsi che Gacutil.exe sia presente nel percorso.
Immettere regsvcs.exe ESCalculatorHosted.dll per registrare il componente dell'assembly e l'applicazione ServiceModelSample con COM+. Assicurarsi che Regsvcs.exe sia presente nel percorso.
Immettere ComSvcConfig.exe /install /application:ServiceModelHostedSample /contract:"ServiceModelHostedSample.ESCalculator,ICalculator" /hosting:complus /mex /verbose per esporre l'interfaccia come servizio ospitato da Internet Information Services (IIS). Assicurarsi che ComSvcConfig.exe sia presente nel percorso.
Per sostituire la configurazione predefinita con la configurazione personalizzata di questo esempio, copiare il file Service/application.config nella directory %Programmi%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}.
Per eseguire l'esempio sullo stesso computer
Per avviare l'applicazione e gli endpoint utilizzando la console di gestione di Servizi componenti, fare clic con il pulsante destro del mouse su ServiceModelHostedSample e selezionare Avvia.
Testare l'accesso al servizio in un browser immettendo l'indirizzo seguente: https://localhost:8082/ServiceModelHostedSample. In risposta, viene visualizzata un pagina di conferma.
Eseguire Client.exe da \client\bin\, nella cartella specifica della lingua. L'attività del client viene visualizzata nella finestra della console client.
Se il client e il servizio non sono in grado di comunicare, vedere Suggerimenti per la risoluzione dei problemi.
Nota
L'esempio genera un programma client di applicazione. Per visualizzarne l'output, è necessario avviarlo utilizzando un prompt dei comandi.
Per eseguire l'esempio tra più computer
Copiare il file ESCalculatorHosted.dll dalla directory service\bin e il file CreateAppLeaveRunning.vbs dalla directory del servizio a una directory sul computer del servizio.
Da un prompt dei comandi, spostarsi a quella directory di destinazione sul computer del servizio. Se si utilizza Windows Vista o Windows Server 2008 assicurarsi di eseguire il prompt dei comandi come amministratore.
Eseguire lo script CreateAppLeaveRunning.vbs per creare l'applicazione COM+ con l'impostazione "Continua l'esecuzione anche in caso di inattività del sistema".
Immettere gacutil.exe /i ESCalculatorHosted.dll per aggiungere l'assembly alla cache di assembly globale (GAC). Assicurarsi che Gacutil.exe sia presente nel percorso.
Immettere regsvcs.exe ESCalculatorHosted.dll per registrare il componente dell'assembly e l'applicazione ServiceModelSample con COM+. Assicurarsi che Regsvcs.exe sia presente nel percorso.
Immettere ComSvcConfig.exe /install /application:ServiceModelHostedSample /contract:"ServiceModelHostedSample.ESCalculator,ICalculator" /hosting:complus /mex /verbose per esporre l'interfaccia come servizio ospitato in IIS. Assicurarsi che ComSvcConfig.exe sia presente nel percorso.
Per sostituire la configurazione predefinita con la configurazione personalizzata di questo esempio, copiare il file Service/application.config nella directory %Programmi%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}.
Nel file di configurazione dell'applicazione di servizio, modificare il valore dell'indirizzo della definizione dell'endpoint affinché corrisponda al nuovo indirizzo del servizio. Sostituire qualsiasi riferimento a "localhost" con un nome di dominio completo nell'indirizzo.
Per avviare l'applicazione e gli endpoint utilizzando la console di gestione di Servizi componenti, fare clic con il pulsante destro del mouse su ServiceModelHostedSample e selezionare Avvia.
Copiare i file del programma client dalla cartella \client\bin\, nella cartella specifica della lingua, al computer client.
Se il servizio è in esecuzione con un account di dominio, aprire il file di configurazione del client e modificare il valore dell'indirizzo della definizione dell'endpoint perché corrisponda al nuovo indirizzo del servizio. Sostituire qualsiasi riferimento a "localhost" con un nome di dominio completo nell'indirizzo. Se il servizio è in esecuzione con un account di dominio, rigenerare la configurazione client eseguendo Svcutil.exe sul servizio. Utilizzare il file generato anziché il file di configurazione dell'esempio. Il file di configurazione generato contiene informazioni di identità aggiuntive e contiene tutte le impostazioni necessarie per connettersi all'endpoint del servizio, anche se si tratta di impostazioni predefinite.
Verificare che sia possibile accedere al servizio dal computer client utilizzando un browser.
Sul computer client, avviare Client.exe da un prompt dei comandi.
Per eseguire la pulitura dopo l'esempio
- Per motivi di protezione, rimuovere il componente ESCalculatorHosted dalla cache di assembly globale, eliminare l'applicazione COM+ ServiceModelHostedSample e rimuovere la directory principale %PROGRAMMI%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}\ una volta completato l'esempio.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.