Convalida client
I servizi pubblicano spesso metadati per consentire la generazione e configurazione automatica di tipi di proxy client. Quando il servizio non è considerato attendibile, le applicazioni client devono convalidare che i metadati siano conformi ai criteri dell'applicazione client riguardanti la sicurezza, le transazioni, il tipo di contratto di servizio e così via. Nell'esempio seguente viene dimostrato come scrivere un comportamento dell'endpoint client che convalida l'endpoint del servizio per garantire che quest'ultimo possa essere utilizzato senza rischi.
Il servizio espone quattro endpoint del servizio. Il primo endpoint utilizza WSDualHttpBinding, il secondo utilizza l'autenticazione NTLM, il terzo abilita il flusso delle transazioni e il quarto utilizza l'autenticazione basata sui certificati.
Il client utilizza la classe MetadataResolver per recuperare i metadati per il servizio. Il client applica i criteri di proibizione delle associazioni duplex, autenticazione NTLM e flusso delle transazioni utilizzando un comportamento di convalida. Per ogni istanza ServiceEndpoint importata dai metadati del servizio, l'applicazione client aggiunge un'istanza del comportamento dell'endpoint InternetClientValidatorBehavior a ServiceEndpoint prima di tentare di utilizzare un client Windows Communication Foundation (WCF) per connettersi all'endpoint. Il metodo Validate del comportamento viene eseguito prima che venga chiamata qualsiasi operazione nel servizio e applica i criteri del client generando InvalidOperationExceptions.
Per compilare l'esempio
- Per compilare la soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.
Per eseguire l'esempio nello stesso computer
Aprire un prompt dei comandi di Visual Studio con privilegi di amministratore ed eseguire Setup.bat dalla cartella di installazione dell'esempio. In questo modo vengono installati tutti i certificati necessari per l'esecuzione dell'esempio.
Eseguire l'applicazione di servizio da \service\bin\Debug.
Eseguire l'applicazione client da \client\bin\Debug. L'attività del client viene visualizzata nella finestra dell'applicazione console.
Se il client e il servizio non sono in grado di comunicare, vedere Troubleshooting Tips.
Rimuovere i certificati eseguendo Cleanup.bat una volta completato l'esempio. Negli altri esempi relativi alla sicurezza vengono utilizzati gli stessi certificati.
Per eseguire l'esempio tra più computer
Sul server aprire un prompt dei comandi di Visual Studio con privilegi di amministratore, quindi digitare setup.bat service. Quando si esegue setup.bat
Modificare App.config sul server per riflettere il nome del nuovo certificato, ovvero modificare l'attributo findValue nell'elemento <serviceCertificate> of <serviceCredentials> Element con il nome di dominio completo del computer.
Copiare il file Service.cer dalla directory del servizio nella directory del client sul computer relativo.
Sul client aprire un prompt dei comandi di Visual Studio 2010 con privilegi di amministratore, quindi digitare setup.bat client. Quando si esegue setup.bat
Nel file client.cs modificare il valore dell'indirizzo dell'endpoint MEX e il findValue per impostare il certificato del server predefinito in modo che corrisponda al nuovo indirizzo del servizio. Tale operazione viene eseguita sostituendo localhost con il nome di dominio completo del server. Ricompilare il file.
Copiare il file Client.cer dalla directory del client nella directory del servizio sul server.
Sul client aprire un prompt dei comandi di Visual Studio con privilegi di amministratore ed eseguire ImportServiceCert.bat. In questo modo viene importato il certificato del servizio dal file Service.cer nell'archivio CurrentUser - TrustedPeople.
Sul server aprire un prompt dei comandi di Visual Studio con privilegi di amministratore ed eseguire ImportClientCert.bat. In questo modo viene importato il certificato del client dal file Client.cer nell'archivio LocalMachine - TrustedPeople.
Nel computer del servizio compilare il progetto di servizio in Visual Studio ed eseguire service.exe.
Nel computer client eseguire client.exe.
- Se il client e il servizio non sono in grado di comunicare, vedere Troubleshooting Tips.
Per eseguire la pulizia dopo l'esempio
Eseguire Cleanup.bat nella cartella degli esempi una volta completato l'esempio.
Nota: Questo script non rimuove i certificati del servizio da un client quando si esegue l'esempio tra più computer. Se sono stati eseguiti esempi di WCF che utilizzano certificati tra più computer, verificare di cancellare i certificati del servizio installati nell'archivio CurrentUser - TrustedPeople. A questo scopo, utilizzare il comando seguente: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Nome completo del computer server>. Ad esempio: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.