Autenticazione personalizzata dei messaggi del canale

In questo esempio viene illustrato l'utilizzo dell'associazione NetPeerTcpBinding con la modalità di autenticazione personalizzata, che fornisce comunicazioni a più parti tramite l'autenticazione peer fornita dall'applicazione. Questo esempio è una variante di Esempio della guida introduttiva. Per una panoramica di Windows Communication Foundation (WCF), vedere Esempio della guida introduttiva.

In questo esempio tutte le istanze sono applicazioni console indipendenti e non vengono utilizzati client e server.

A differenza di altri esempi di associazioni di trasporto, in questo esempio viene utilizzata l'interfaccia di contratto IChat per illustrare le comunicazioni a più parti. Tutte le istanze implementano questo contratto per ricevere messaggi e creare proxy dello stesso contratto per l'invio dei messaggi alla mesh. Questo processo viene illustrato creando un canale duplex nella mesh.

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine dell'argomento.

Il canale peer è una tecnologia di comunicazione peer-to-peer (P2P) a più parti disponibile in WCF. Fornisce un canale di comunicazione P2P basato su messaggi sicuro e scalabile per gli sviluppatori di applicazioni. Un esempio comune di applicazione a più parti che può trarre profitto da un canale peer è costituito dalle applicazioni collaborative, ad esempio le chat, in cui un gruppo di persone parla con altre persone in modo peer-to-peer senza bisogno di server. Il canale peer consente la collaborazione P2P, la distribuzione di contenuti, il bilanciamento del carico e l'elaborazione distribuita in scenari consumer e aziendali.

Con il canale peer vengono introdotti i seguenti nuovi concetti:

  • Una mesh è un insieme denominato (un grafico interconnesso) di nodi peer che possono comunicare fra loro e sono identificati da un ID mesh univoco.

    Nota

    I nodi attivi nella rete pubblicano i rispettivi nomi di rete in modo da poter essere individuati dagli altri nodi. Una rete presenta le caratteristiche seguenti: viene modificata automaticamente quando i nodi vengono aggiunti e lasciano la rete, assicurando che tutti i nodi godano di una buona connettività alla rete e che le connessioni vengano ottimizzate dinamicamente in base ai modelli di traffico correnti.

  • Un nodo Peer rappresenta un endpoint in una rete. Un'applicazione può avere anche più nodi peer che partecipano a reti diverse.

  • Un resolver del peer è responsabile della risoluzione di un ID di rete negli indirizzi degli endpoint di alcuni nodi della rete. Questi indirizzi vengono utilizzati da un nodo peer per connettersi ad altri nodi della rete. In tal modo, è possibile la propagazione dei messaggi in tutta la rete mesh.

PeerTransportCredentialType specifica come vengono autenticati reciprocamente i peer della mesh. Questa proprietà può essere specificata nella configurazione dell'associazione, nell'oggetto NetPeerTcpBinding o utilizzando PeerTransportBindingElement. Un'istanza di ClientCredentialSettings o ServiceCredentialSettings con credenziali appropriate specificate nella proprietà Peer deve essere aggiunta all'insieme dei comportamenti nella channel factory o nell'host del servizio, a seconda dell'utilizzo.

Il canale peer supporta le modalità di autenticazione seguenti nella classe PeerTransportCredentialType:

  1. Password. Si tratta della modalità di autenticazione predefinita per il canale peer. In questa modalità, tutti i partecipanti nella rete devono dimostrare di conoscere una password segreta. Questa operazione viene eseguita stabilendo una connessione sicura tra elementi adiacenti e scambiando una trasformazione di questa password. Se è specificato Password, la proprietà ClientCredentialSettings.Peer deve disporre di una password valida e facoltativamente di un'istanza di X509Certificate2 con SetSelfCertificate.
  2. Certificate. In questa modalità, l'autenticazione specifica dell'applicazione viene eseguita quando si stabiliscono connessioni peer. Quando questa modalità viene specificata, l'applicazione deve specificare un'implementazione concreta di X509Certificate2Validator nell'elemento ClientCredentialSettings.Peer.PeerAuthentication aggiunto alla channel factory.

L'associazione è specificata nel file di configurazione per il client. Il tipo di associazione è specificato nell'attributo binding dell'elemento endpoint, come illustrato nell'esempio seguente.

<client>
  <!-- chat instance participating in the mesh -->
  <endpoint name="ChatEndpoint"
            address="net.p2p://SecurechatMesh/servicemodelsamples/chat"
            binding="netPeerTcpBinding"
            bindingConfiguration="MyBinding"
            contract="Microsoft.ServiceModel.Samples.IChat">
  </endpoint>
</client>

Se si utilizza l'associazione NetPeerTcpBinding con il comportamento predefinito, viene abilitata la protezione basata sulla password. L'elemento binding fornisce attributi per impostare la porta, l'indirizzo IP di ascolto, il tipo di resolver, la dimensione massima dei messaggi, la dimensione massima del pool di buffer, le quote dei lettori, la modalità di autenticazione, l'autenticazione dei messaggi e i timeout di chiusura, apertura, invio e ricezione.

Nota

Questo esempio utilizza il resolver Peer predefinito (PNRP) che non è disponibile in Windows Server 2003. Di conseguenza, per eseguire questo esempio su Windows Server 2003, è necessario utilizzare un resolver peer personalizzato. Per un esempio in cui viene utilizzato un resolver del peer personalizzato, vedere Chat del canale peer, ad esempio:

<netPeerTcpBinding>
    <binding configurationName="Binding1"> 
        <resolver mode="Custom">
            <customResolver type=
                 "MyAppNameSpace.MyCustomPeerResolver, myApp"/>
        </resolver>
    </binding>
</netPeerTcpBinding>

Il file contenente MyCustomPeerResolver deve essere compilato con le istanze di chat. Si noti che se l'esempio viene eseguito in più computer con piattaforme diverse, è necessario che venga utilizzato lo stesso resolver.

In questo esempio viene illustrato inoltre come recuperare il nodo peer associato all'istanza del destinatario o del mittente e come eseguire la registrazione per i relativi eventi in linea e non in linea. Un evento in linea viene generato quando il nodo peer è connesso ad almeno un altro nodo peer nella rete. Un evento non in linea viene generato invece quando il nodo peer non è più connesso ad altri nodi peer nella rete.

In questo caso, il canale peer non è integrato con ServiceModel Metadata Utility Tool (Svcutil.exe).

Quando si esegue l'esempio, il client visualizza un messaggio che indica che è pronto per inviare messaggi. I messaggi inviati da un client vengono visualizzati nelle finestre della console di tutti gli altri client collegati alla stessa rete. Per terminare il client, premere Q seguito da INVIO nelle finestre della console di un client.

Se si abilita la traccia o la registrazione dei messaggi, è possibile controllare l'attività dei messaggi a un livello più profondo. Le procedure seguenti illustrano come abilitare la traccia e la registrazione dei messaggi.

Nota

È importante notare che attualmente nell'esempio non vengono gestite tutte le eccezioni che possono essere generate dall'infrastruttura. Se si utilizzano questi esempi in un ambiente commerciale o di produzione, seguire le procedure consigliate per una corretta gestione delle eccezioni.

Per impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di aver eseguito Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Per generare l'edizione Visual C# .NET o Visual Basic .NET della soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.

  3. Per eseguire l'esempio in un solo computer, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.

  4. Per installare PNRP in Windows XP SP2 (installazione singola):

    1. Nel Pannello di controllo fare doppio clic su Installazione applicazioni.
    2. Nella finestra di dialogo Installazione applicazioni scegliere Installazione componenti di Windows.
    3. Nell'Aggiunta guidata componenti di Windows selezionare la casella di controllo "Servizi di rete" e fare clic su "Dettagli".
    4. Selezionare la casella di controllo "Peer-to-peer" e fare clic su "OK".
    5. Nell'Aggiunta guidata componenti di Windows fare clic su "Avanti".
    6. Al termine dell'installazione, fare clic su "Fine".
    7. Dal prompt della shell dei comandi avviare il servizio PNRP con il comando seguente: net start pnrpsvc.
  5. Ogni volta che il passaggio 3 fa riferimento al client e al servizi, i passaggi si applicano istanze separate dell'applicazione.

  6. Se si esegue per la prima volta questo esempio in un computer, eseguire Setup.bat per creare un certificato emesso da un autorità e due certificati client. Il nome predefinito per l'autorità di emissione è "TrustedPeerChannelIssuer" e per i certificati client "peer1" e "peer2". I nomi possono essere specificati anche passando argomenti a Setup.bat come segue: "setup.bat <nomepeer> <nomeemittente>", dove <nomepeer> è un nome prefisso dei client e <nomeemittente> è il nome dell'autorità emittente attendibile di esempio. Ad esempio, se si immette "setup.bat peer emittente_falso", viene creata un'autorità emittente attendibile denominata "emittente_falso" e certificati client denominati "peer1" e "peer2". Se si eseguono tutte le istanze dell'esempio in un solo computer, continuare con il passaggio 7.

  7. Passaggi aggiuntivi per una configurazione a più computer: per eseguire l'esempio in computer diversi, le informazioni del certificato devono essere copiate da un computer a tutti gli altri computer che eseguono l'esempio, in modo che le informazioni dell'autorità emittente siano coerenti in tutti i peer. Questa operazione può essere portata a termine esportando i certificati client creati utilizzando l'autorità emittente attendibile (generati da Setup.bat). L'autorità emittente attendibile (TrustedPeerChannelIssuer.cer se si utilizza il nome predefinito) deve essere copiata anche a tutti gli altri computer client che eseguono l'esempio. Seguire i tre passaggi seguenti:

    1. Trasferimento dell'autorità emittente attendibile: copiare il file con estensione cer (generato eseguendo Setup.bat nella stessa cartella) nel computer client. Fare clic con il pulsante destro del mouse sul file e scegliere Installa certificato. Fare clic su Avanti e selezionare Mettere tutti i certificati nel seguente archivio. Fare clic su Sfoglia e scegliere Persone attendibili come destinazione per il certificato. Selezionare Avanti e Fine per completare l'importazione del certificato.

    2. Esportazione del certificato client: eseguire Certmgr.msc nel computer utilizzato per generare i certificati client. Selezionare il certificato client dall'archivio personale (in "Certificati - Utente Corrente" - "> Personale" -> "Certificati"). Fare clic con il pulsante destro del mouse sul certificato e selezionare "Tutte le attività" "-> "Esporta…" per avviare l'Esportazione guidata certificati. Fare clic su "Avanti", selezionare "Esporta la chiave privata" e fare di nuovo clic su "Avanti". Selezionare di nuovo "Avanti" per scegliere il formato pfx e i valori predefiniti. Immettere una password per i certificati e fare di nuovo clic su "Avanti". Infine, scegliere un percorso e un nome file e fare clic su "Avanti" e "Fine" per completare il processo di esportazione.

    3. Importazione del certificato client: copiare il file pfx creato nel passaggio (b) nel computer client. Fare clic con il pulsante destro del mouse sul file, quindi scegliere "Installa PFX". Fare clic due volte su "Avanti" e quindi immettere la password utilizzata per esportare il certificato. Fare clic su "Avanti" e su "Fine" per posizionare il certificato nell'archivio personale.

      Nota

      La creazione di un'autorità emittente attendibile e l'esportazione mediante il trasferimento di file possono determinare rischi per la protezione se il file viene distribuito in modo inappropriato. Assicurarsi di cancellare i certificati di esempio dopo avere eseguito l'esempio (passaggio 8).

  8. Eseguire il numero di istanze dell'applicazione desiderato. I messaggi inviati da una istanza vengono ricevuti da tutte le altre. Ogni istanza ha il nome predefinito "peer1". Per distinguere le singole istanze, modificare il valore della chiave "member" in appSettings nel file di configurazione dell'applicazione e creare un certificato client con lo stesso nome.

  9. Infine, eseguire Cleanup.bat per rimuovere i certificati creati da questo esempio. Se vengono utilizzati nomi non predefiniti, eseguire "Cleanup.bat <nomepeer> <nomeemittente>" con gli stessi valori utilizzati nel passaggio 6.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.