Interoperabilità con WSE
Questo esempio dimostra come è possibile ottenere l'interoperabilità tra un servizio Web Service Enhancements (WSE) 3.0 e un client o un servizioWindows Communication Foundation (WCF).
L'esempio implementa un'associazione personalizzata di nome WseHttpBinding. Questa associazione consente di utilizzare un file dei criteri WSE 3.0 per configurare un client o un servizio WCF e ottiene interoperabilità con WSE 3.0. Ciò viene svolto da WseHttpBinding fornendo un mapping tra le proprietà WSE 3.0 nel file dei criteri e le proprietà nelle associazioni WCF. WseHttpBinding può essere considerato simile a un'associazione dello standard in quanto fornisce una visualizzazione vincolata delle proprietà di altre associazioni nello stack, in particolare SecurityBindingElement.
L'esempio è diviso in due parti. La prima parte dimostra l'utilizzo di WseHttpBinding per eseguire una chiamata da un client WCF a un servizio indipendente WCF. La seconda parte richiede che sia installato WSE 3.0 SDK.
Utilizzo di WseHttpBinding tra un client e un servizio WCF
Sul client, il metodo CallWcfService
crea un'istanza di WseHttpBinding e imposta le proprietà per i requisiti di protezione del client:
static void Main(string[] args)
{
CallWcfService();
...
}
Questi requisiti devono corrispondere ai valori impostati nella funzione Main
del servizio, come illustrato nel codice seguente:
//Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
//Create and configure the WseHttpBinding.
WseHttpBinding binding = new WseHttpBinding();
binding.SecurityAssertion = WseSecurityAssertion.AnonymousForCertificate;
binding.EstablishSecurityContext = true;
binding.RequireDerivedKeys = true;
binding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, "");
ServiceCredentials creds = new ServiceCredentials();
creds.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine,
StoreName.My, X509FindType.FindBySubjectName, "localhost");
serviceHost.Description.Behaviors.Add(creds);
serviceHost.Open();
...
}
Per impostare, compilare ed eseguire l'esempio
Assicurarsi di avere eseguito Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Per compilare la soluzione C#, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.
Per eseguire l'esempio su un solo computer, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.
Il servizio in questo esempio è indipendente. Di conseguenza, verificare di avere eseguito il file Service.exe nella directory /service/bin prima di eseguire il client.
Utilizzo di WseHttpBinding per comunicare con servizi WSE 3.0.
Il client in questo progetto può essere utilizzato anche per comunicare con gli esempi della Guida rapida in WSE 3.0 SDK.
Dopo avere installato WSE 3.0 SDK, è possibile utilizzare lo strumento Svcutil.exe per generare un client che può essere utilizzato per comunicare con un servizio WSE 3.0 dopo la relativa compilazione. Nell'esempio seguente è illustrato come eseguire questa operazione con il servizio WSE 3.0 in esecuzione sul computer locale.
svcutil.exe /out:wseproxy.cs /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx
Il file Wseproxy.cs è incluso in questo progetto. Il nome della classe proxy generata è WSSecurityAnonymousServiceSoapProxy
e viene fornito con una WseHttpBinding configurata con proprietà nel codice o utilizzando un file dei criteri WSE 3.0 caricato dal file di configurazione Wse3PolicyCache.config. In questo progetto è incluso anche un file di configurazione Wse3PolicyCache.config.
Dopo avere compilato correttamente l'esempio WSE 3.0 WSSecurityAnonymous, all'esecuzione del client viene restituita in modo protetto una quotazione azionaria dal servizio WSE 3.0.
Le istruzioni di installazione per WSE 3.0 si trovano alla fine di questo argomento.
Sul client, impostare come commento la chiamata a CallWcfService
rimuovere il commento dal codice di CallWseService
. Il passaggio di true o false determina se viene utilizzato o meno un file dei criteri per configurare WseHttpBinding chiamando il metodo LoadPolicy(String filename, String policyName)
, che utilizza un XmlReader per analizzare il file dei criteri WSE 3.0.
Nota
Se nel client è installato WSE 3.0 invece di utilizzare un XmlReader per caricare un file dei criteri è possibile modificare il codice in modo da utilizzare la classe Microsoft.Web.Services3.Design.Policies di WSE 3.0 per caricare il criterio. Il vantaggio è che la classe Microsoft.Web.Services3.Design.Policies è in grado di analizzare tutti i moduli validi dei file dei criteri WSE 3.0 e quindi fornirli a WseHttpBinding. Grazie al codice che utilizza il tipo XmlReader è possibile analizzare solo un set limitato di file dei criteri.
Per impostare, compilare ed eseguire l'esempio con WSE 3.0
Installare il prodotto WSE 3.0 da Web Services Enhancements (WSE) 3.0 per Microsoft .NET.
Leggere la guida agli esempi nella Guida rapida di WSE 3.0 su come configurare e impostare gli esempi WSE. È necessario installare i certificati X.509 corretti e creare una directory virtuale per ospitare il servizio Web in Internet Information Services (IIS). In particolare eseguire il file Setup.bat nella directory di installazione predefinita C:\Program Files\Microsoft WSE\v3 .0 \Samples.
Compilare l'esempio di criteri della Guida rapida di WSE 3.0 WSSecurityAnonymous, che per impostazione predefinita è installato nella directory seguente. Nota: se si preferisce è disponibile anche una versione solo codice di WSSecurityAnonymous funzionante. Se si preferisce utilizzare la versione solo codice, è necessario modificare l'URL del servizio nel client in https://localhost/WSSecurityAnonymousCode/WSSecurityAnonymousService.asmx.
Questo è il progetto WSE 3.0 C:\Program Files\Microsoft WSE\v3 .0 \Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy.
Il client WCF in questo esempio di interoperabilità è stato progettato per interoperare con questo esempio della Guida rapida di WSE 3.0.
Nella funzione
Main
del file Client.cs, rimuovere il commento dalle chiamate al metodoCallWseService
. È anche possibile rimuovere il commento dalla chiamata aCallWcfService
per evitare che venga chiamato il servizio WCF.Per compilare la soluzione C#, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.
Per eseguire l'esempio su un solo computer, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.
Per impostare, compilare ed eseguire l'esempio con WSE 3.0 su più computer
Per prima cosa impostare un servizio WSE 3.0. Installare il prodotto WSE 3.0 sul computer remoto da Web Services Enhancements (WSE) 3.0 per Microsoft .NET.
Leggere la guida agli esempi nella Guida rapida di WSE 3.0 su come configurare e impostare gli esempi WSE. È necessario installare i certificati X.509 corretti e creare una directory virtuale per ospitare il servizio Web in Internet Information Services (IIS). In particolare eseguire il file Setup.bat nella directory di installazione predefinita C:\Program Files\Microsoft WSE\v3 .0 \Samples.
Compilare l'esempio di criteri della Guida rapida di WSE 3.0 WSSecurityAnonymous, che per impostazione predefinita è installato nella directory seguente.
Nota
Se si preferisce, è disponibile anche una versione solo codice di WSSecurityAnonymous funzionante.
Questo è il progetto WSE 3.0: C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy
Avendo impostato il server il client WCF non verrà configurato su un altro computer. Utilizzando lo strumento MMC, esportare il certificato WSE2QuickStartServer che si trova nell'archivio certificati LocalMachine/Personal in cui è stato installato WSE 3.0 su un file mediante l'opzione Tutte le attività->Esporta dal menu di scelta rapida. Per creare un file con estensione CER non è necessario esportare la chiave privata, ma solo quella pubblica. Vedere il file readme.htm nella directory C:\Program Files\Microsoft WSE\v3.0\Samples di WSE 3.0 per i dettagli sull'utilizzo dello snap-in di gestione dei certificati di MMC per visualizzare i certificati in un archivio certificati.
Copiare il file con estensione CER dal server al computer client e importare il certificato pubblico nell'archivio certificati CurrentUser/Trusted People. Vedere il file readme.htm nella directory C:\Program Files\Microsoft WSE\v3.0\Samples di WSE 3.0 per i dettagli sull'utilizzo dello snap-in di gestione dei certificati di MMC.
Nota
Quando viene eseguito, il file setup.bat di WSE 3.0 provvede a copiare il certificato server WSE2QuickStartServer da uno archivio certificati a un altro.
Per eseguire l'esempio in una configurazione tra più computer, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation per il client WCF e configurare il client per utilizzare l'indirizzo del servizio WSE 3.0 invece di localhost. Ad esempio, su un computer di nome "mymachine" per impostazione predefinita l'indirizzo è il seguente: http://mymachine/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx
Nella funzione
Main
del file Client.cs, rimuovere il commento dalle chiamate al metodoCallWseService
. È anche possibile rimuovere il commento dalla chiamata aCallWcfService
per evitare che venga chiamato il servizio WCF.Per compilare la soluzione C#, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.
Eseguire il client.
Per eseguire la pulitura dopo l'esecuzione dell'esempio
- Per rimuovere i certificati dal client o dal server utilizzare lo strumento MMC. In alternativa sul server è possibile eseguire il file Cleanup.bat nella directory C:\Program Files\Microsoft WSE\v3.0\Samples.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.