Provider di token SAMLSAML Token Provider

Questo esempio dimostra come implementare un provider di token SAML client personalizzato.This sample demonstrates how to implement a custom client SAML token provider. Un provider di token in Windows Communication Foundation (WCF) viene usato per fornire credenziali all'infrastruttura di sicurezza.A token provider in Windows Communication Foundation (WCF) is used for supplying credentials to the security infrastructure. In generale, il provider di token esamina la destinazione ed emette credenziali adatte in modo che l'infrastruttura di sicurezza possa proteggere il messaggio.The token provider in general examines the target and issues appropriate credentials so that the security infrastructure can secure the message. WCF viene fornito con il Provider di Token Gestione credenziali predefinito.WCF ships with the default Credential Manager Token Provider. WCF viene anche fornito con un CardSpaceCardSpace provider di token.WCF also ships with an CardSpaceCardSpace token provider. I provider di token personalizzati sono utili nei casi seguenti:Custom token providers are useful in the following cases:

  • Se è disponibile un archivio di credenziali con cui questi provider di token non sono in grado di operare.If you have a credential store that these token providers cannot operate with.

  • Se si desidera fornire un meccanismo personalizzato per la trasformazione delle credenziali dal punto di cui l'utente fornisce i dettagli a quando il framework di client WCF utilizza le credenziali.If you want to provide your own custom mechanism for transforming the credentials from the point when the user provides the details to when the WCF client framework uses the credentials.

  • Se si sta compilando un token personalizzato.If you are building a custom token.

In questo esempio viene illustrato come compilare un provider di token personalizzato che consente a un token SAML ottenuto di fuori framework client WCF da usare.This sample shows how to build a custom token provider that allows a SAML token obtained from outside of the WCF client framework to be used.

Per riassumere, questo esempio dimostra quanto segue.To summarize, this sample demonstrates the following:

  • Come è possibile configurare un client con un provider personalizzato.How a client can be configured with a custom token provider.

  • Come è possibile passare un token SAML alle credenziali client personalizzate.How a SAML token can be passed to the custom client credentials.

  • Modo in cui viene fornito il token SAML al framework client WCF.How the SAML token is provided to the WCF client framework.

  • Come viene autenticato il servizio dal client mediante il certificato X.509 del server.How the server is authenticated by the client using the server's X.509 certificate.

Il servizio espone due endpoint per comunicare con il servizio definito mediante il file di configurazione App.config. Ciascun endpoint è costituito da un indirizzo, un binding e un contratto.The service exposes two endpoints for communicating with the service, defined using the configuration file App.config. Each endpoint consists of an address, a binding, and a contract. L'associazione è configurata con una classe wsFederationHttpBinding standard che usa la sicurezza del messaggio.The binding is configured with a standard wsFederationHttpBinding, which uses Message security. Un endpoint attende che il client si autentichi con un token SAML che usa una chiave di prova simmetrica mentre l'altro attende che il client si autentichi con un token SAML che usa una chiave di prova asimmetrica.One endpoint expects the client to authenticate with a SAML token that uses a symmetric proof key while the other expects the client to authenticate with a SAML token that uses an asymmetric proof key. Il servizio configura anche il certificato del servizio usando il comportamento serviceCredentials.The service also configures the service certificate using serviceCredentials behavior. Il comportamento serviceCredentials consente di configurare un certificato del servizio.The serviceCredentials behavior allows you to configure a service certificate. Un certificato del servizio viene usato da un client per autenticare il servizio e fornire protezione del messaggio.A service certificate is used by a client to authenticate the service and provide message protection. La configurazione seguente fa riferimento al certificato "localhost" installato durante l'installazione dell'esempio come descritto nelle istruzioni fornite alla fine di questo argomento.The following configuration references the "localhost" certificate installed during the sample setup as described in the setup instructions at the end of this topic. Il comportamento serviceCredentials consente anche di configurare certificati che sono attendibili per la firma di token SAML.The serviceCredentials behavior also allows you to configure certificates that are trusted to sign SAML tokens. La configurazione seguente fa riferimento al certificato 'Alice' installato durante l'esempio.The following configuration references the 'Alice' certificate installed during the sample.

<system.serviceModel>  
 <services>  
  <service   
          name="Microsoft.ServiceModel.Samples.CalculatorService"  
          behaviorConfiguration="CalculatorServiceBehavior">  
   <host>  
    <baseAddresses>  
     <!-- configure base address provided by host -->  
     <add    
  baseAddress="http://localhost:8000/servicemodelsamples/service/" />  
    </baseAddresses>  
   </host>  
   <!-- use base address provided by host -->  
   <!-- Endpoint that expect SAML tokens with Symmetric proof keys -->  
   <endpoint address="calc/symm"  
             binding="wsFederationHttpBinding"  
             bindingConfiguration="Binding1"   
             contract="Microsoft.ServiceModel.Samples.ICalculator" />  
   <!-- Endpoint that expect SAML tokens with Asymmetric proof keys -->  
   <endpoint address="calc/asymm"  
             binding="wsFederationHttpBinding"  
             bindingConfiguration="Binding2"   
             contract="Microsoft.ServiceModel.Samples.ICalculator" />  
  </service>  
 </services>  

 <bindings>  
  <wsFederationHttpBinding>  
   <!-- Binding that expect SAML tokens with Symmetric proof keys -->  
   <binding name="Binding1">  
    <security mode="Message">  
     <message negotiateServiceCredential ="false"   
              issuedKeyType="SymmetricKey"   
              issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"  />  
    </security>  
   </binding>  
   <!-- Binding that expect SAML tokens with Asymmetric proof keys -->  
   <binding name="Binding2">  
    <security mode="Message">  
     <message negotiateServiceCredential ="false"  
              issuedKeyType="AsymmetricKey"   
              issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"  />  
    </security>  
   </binding>          
  </wsFederationHttpBinding>  
 </bindings>  

 <behaviors>  
  <serviceBehaviors>  
   <behavior name="CalculatorServiceBehavior">  
    <!--   
    The serviceCredentials behavior allows one to define a service certificate.  
    A service certificate is used by a client to authenticate the service and provide message protection.  
    This configuration references the "localhost" certificate installed during the setup instructions.  
    -->  
    <serviceCredentials>  
     <!-- Set allowUntrustedRsaIssuers to true to allow self-signed, asymmetric key based SAML tokens -->  
     <issuedTokenAuthentication allowUntrustedRsaIssuers ="true" >  
      <!-- Add Alice to the list of certs trusted to issue SAML tokens -->  
      <knownCertificates>  
       <add storeLocation="LocalMachine"   
            storeName="TrustedPeople"   
            x509FindType="FindBySubjectName"   
            findValue="Alice"/>  
      </knownCertificates>  
     </issuedTokenAuthentication>  
     <serviceCertificate storeLocation="LocalMachine"  
                         storeName="My"  
                         x509FindType="FindBySubjectName"  
                         findValue="localhost"  />  
    </serviceCredentials>  
   </behavior>  
  </serviceBehaviors>  
 </behaviors>  

</system.serviceModel>  

I passaggi seguenti mostrano come sviluppare un provider di token SAML personalizzato e integrarlo con WCF: framework di sicurezza:The following steps show how to develop a custom SAML token provider and integrate it with WCF: security framework:

  1. Scrivere un provider di token SAML personalizzato.Write a custom SAML token provider.

    L'esempio implementa un provider di token SAML personalizzato che restituisce un token di sicurezza basato su un'asserzione SAML fornita in fase di costruzione.The sample implements a custom SAML token provider that returns a security token based on a SAML assertion that is provided at construction time.

    Per eseguire questa attività il provider di token personalizzato viene derivato dalla classe SecurityTokenProvider ed esegue l'override del metodo GetTokenCore.To perform this task, the custom token provider is derived from the SecurityTokenProvider class and overrides the GetTokenCore method. Questo metodo creare e restituisce un nuovo SecurityToken.This method creates and returns a new SecurityToken.

    protected override SecurityToken GetTokenCore(TimeSpan timeout)  
    {  
     // Create a SamlSecurityToken from the provided assertion  
     SamlSecurityToken samlToken = new SamlSecurityToken(assertion);  
    
     // Create a SecurityTokenSerializer that will be used to   
     // serialize the SamlSecurityToken  
     WSSecurityTokenSerializer ser = new WSSecurityTokenSerializer();  
     // Create a memory stream to write the serialized token into  
     // Use an initial size of 64Kb  
     MemoryStream s = new MemoryStream(UInt16.MaxValue);  
    
     // Create an XmlWriter over the stream  
     XmlWriter xw = XmlWriter.Create(s);  
    
     // Write the SamlSecurityToken into the stream  
     ser.WriteToken(xw, samlToken);  
    
     // Seek back to the beginning of the stream  
     s.Seek(0, SeekOrigin.Begin);  
    
     // Load the serialized token into a DOM  
     XmlDocument dom = new XmlDocument();  
     dom.Load(s);  
    
     // Create a KeyIdentifierClause for the SamlSecurityToken  
     SamlAssertionKeyIdentifierClause samlKeyIdentifierClause = samlToken.CreateKeyIdentifierClause<SamlAssertionKeyIdentifierClause>();  
    
    // Return a GenericXmlToken from the XML for the   
    // SamlSecurityToken, the proof token, the valid from and valid  
    // until times from the assertion and the key identifier clause  
    // created above  
    return new GenericXmlSecurityToken(dom.DocumentElement, proofToken, assertion.Conditions.NotBefore, assertion.Conditions.NotOnOrAfter, samlKeyIdentifierClause, samlKeyIdentifierClause, null);  
    }  
    
  2. Scrivere il gestore di token di sicurezza personalizzato.Write custom security token manager.

    La classe SecurityTokenManager viene usata per creare SecurityTokenProvider per il SecurityTokenRequirement specifico che viene passato nel metodo CreateSecurityTokenProvider.The SecurityTokenManager class is used to create SecurityTokenProvider for specific SecurityTokenRequirement that is passed to it in CreateSecurityTokenProvider method. Viene inoltre usato un gestore del token di sicurezza per creare autenticatori del token e serializzatori del token, che però non sono trattati in questo esempio.A security token manager is also used to create token authenticators and token serializer, but those are not covered by this sample. In questo esempio il gestore del token di sicurezza personalizzato eredita dalla classe ClientCredentialsSecurityTokenManager ed esegue l'override del metodo CreateSecurityTokenProvider per restituire il provider di token SAML personalizzato quando i requisiti del token passati indicano che il token SAML è richiesto.In this sample the custom security token manager inherits from the ClientCredentialsSecurityTokenManager class and overrides the CreateSecurityTokenProvider method to return the custom SAML token provider when the passed token requirements indicate that the SAML token is requested. Se la classe delle credenziali client (vedere il passaggio 3) non ha specificato un'asserzione, il gestore del token di sicurezza crea un'istanza appropriata.If the client credentials class (see step 3) has not specified an assertion, the security token manager creates an appropriate instance.

    public class SamlSecurityTokenManager :  
     ClientCredentialsSecurityTokenManager  
    {  
     SamlClientCredentials samlClientCredentials;  
    
     public SamlSecurityTokenManager ( SamlClientCredentials samlClientCredentials)  
      : base(samlClientCredentials)  
     {  
      // Store the creating client credentials  
      this.samlClientCredentials = samlClientCredentials;  
     }  
    
     public override SecurityTokenProvider CreateSecurityTokenProvider ( SecurityTokenRequirement tokenRequirement )  
     {  
      // If token requirement matches SAML token return the   
      // custom SAML token provider  
      if (tokenRequirement.TokenType == SecurityTokenTypes.Saml ||  
          tokenRequirement.TokenType == "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1")  
      {  
       // Retrieve the SAML assertion and proof token from the   
       // client credentials  
       SamlAssertion assertion = this.samlClientCredentials.Assertion;  
       SecurityToken prooftoken = this.samlClientCredentials.ProofToken;  
    
       // If either the assertion of proof token is null...  
       if (assertion == null || prooftoken == null)  
       {  
        // ...get the SecurityBindingElement and then the   
        // specified algorithm suite  
        SecurityBindingElement sbe = null;  
        SecurityAlgorithmSuite sas = null;  
    
        if ( tokenRequirement.TryGetProperty<SecurityBindingElement> ( "http://schemas.microsoft.com/ws/2006/05/servicemodel/securitytokenrequirement/SecurityBindingElement", out sbe))  
        {  
         sas = sbe.DefaultAlgorithmSuite;  
        }  
    
        // If the token requirement is for a SymmetricKey based token..  
        if (tokenRequirement.KeyType == SecurityKeyType.SymmetricKey)  
        {  
         // Create a symmetric proof token  
         prooftoken = SamlUtilities.CreateSymmetricProofToken ( tokenRequirement.KeySize );  
         // and a corresponding assertion based on the claims specified in the client credentials  
         assertion = SamlUtilities.CreateSymmetricKeyBasedAssertion ( this.samlClientCredentials.Claims, new X509SecurityToken ( samlClientCredentials.ClientCertificate.Certificate ), new X509SecurityToken ( samlClientCredentials.ServiceCertificate.DefaultCertificate ), (BinarySecretSecurityToken)prooftoken, sas);  
        }  
        // otherwise...  
        else  
        {  
         // Create an asymmetric proof token  
         prooftoken = SamlUtilities.CreateAsymmetricProofToken();  
         // and a corresponding assertion based on the claims   
         // specified in the client credentials  
         assertion = SamlUtilities.CreateAsymmetricKeyBasedAssertion ( this.samlClientCredentials.Claims, prooftoken, sas );  
        }  
       }  
    
       // Create a SamlSecurityTokenProvider based on the assertion and proof token  
       return new SamlSecurityTokenProvider(assertion, prooftoken);  
      }  
      // otherwise use base implementation  
      else  
      {  
       return base.CreateSecurityTokenProvider(tokenRequirement);  
      }  
    }  
    
  3. Scrivere una credenziale client personalizzata.Write a custom client credential.

    La classe delle credenziali client viene usata per rappresentare le credenziali configurate per il proxy client e crea un gestore del token di sicurezza usato per ottenere gli autenticatori del token, i provider di token e il serializzatore di token.Client credentials class is used to represent the credentials that are configured for the client proxy and creates a security token manager that is used to obtain token authenticators, token providers and token serializer.

    public class SamlClientCredentials : ClientCredentials  
    {  
     ClaimSet claims;  
     SamlAssertion assertion;  
     SecurityToken proofToken;  
    
     public SamlClientCredentials() : base()  
     {  
      // Set SupportInteractive to false to suppress Cardspace UI  
      base.SupportInteractive = false;  
     }  
    
     protected SamlClientCredentials(SamlClientCredentials other) : base ( other )  
     {  
      // Just do reference copy given sample nature  
      this.assertion = other.assertion;  
      this.claims = other.claims;  
      this.proofToken = other.proofToken;  
     }  
    
     public SamlAssertion Assertion { get { return assertion; } set { assertion = value; } }  
    
     public SecurityToken ProofToken { get { return proofToken; } set { proofToken = value; } }  
     public ClaimSet Claims { get { return claims; } set { claims = value; } }  
    
     protected override ClientCredentials CloneCore()  
     {  
      return new SamlClientCredentials(this);  
     }  
    
     public override SecurityTokenManager CreateSecurityTokenManager()  
     {  
      // return custom security token manager  
      return new SamlSecurityTokenManager(this);  
     }  
    }  
    
  4. Configurare il client per l'uso della credenziale client personalizzata.Configure the client to use the custom client credential.

    L'esempio elimina la classe della credenziale client predefinita e fornisce la nuova classe della credenziale client così il client possa usare la credenziale client personalizzata.The sample deletes the default client credential class and supplies the new client credential class so the client can use the custom client credential.

    // Create new credentials class  
    SamlClientCredentials samlCC = new SamlClientCredentials();  
    
    // Set the client certificate. This is the cert that will be used to sign the SAML token in the symmetric proof key case  
    samlCC.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "Alice");  
    
    // Set the service certificate. This is the cert that will be used to encrypt the proof key in the symmetric proof key case  
    samlCC.ServiceCertificate.SetDefaultCertificate(StoreLocation.CurrentUser, StoreName.TrustedPeople, X509FindType.FindBySubjectName, "localhost");  
    
    // Create some claims to put in the SAML assertion  
    IList<Claim> claims = new List<Claim>();  
    claims.Add(Claim.CreateNameClaim(samlCC.ClientCertificate.Certificate.Subject));  
    ClaimSet claimset = new DefaultClaimSet(claims);  
    samlCC.Claims = claimset;  
    
    // set new credentials  
    client.ChannelFactory.Endpoint.Behaviors.Remove(typeof(ClientCredentials));  
    client.ChannelFactory.Endpoint.Behaviors.Add(samlCC);  
    

Nel servizio, vengono visualizzate le richieste associate al chiamante.On the service, the claims associated with the caller are displayed. Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client.When you run the sample, the operation requests and responses are displayed in the client console window. Premere INVIO nella finestra del client per arrestare il client.Press ENTER in the client window to shut down the client.

File batch di installazioneSetup Batch File

Il file batch Setup.bat incluso con questo esempio consente di configurare il server con il certificato attinente per eseguire un'applicazione indipendente che richiede sicurezza server basata su certificato.The Setup.bat batch file included with this sample allows you to configure the server with the relevant certificate to run a self-hosted application that requires server certificate-based security. Questo file batch deve essere modificato per funzionare tra computer diversi o nel caso in cui non sia ospitato.This batch file must be modified to work across computers or to work in a non-hosted case.

Di seguito viene fornita una breve panoramica delle varie sezioni dei file batch in modo che possano essere modificate per l'esecuzione nella configurazione appropriata.The following provides a brief overview of the different sections of the batch files so that they can be modified to run in the appropriate configuration.

  • Creazione del certificato server:Creating the server certificate:

    Le righe seguenti del file batch Setup.bat creano il certificato server da usare.The following lines from the Setup.bat batch file create the server certificate to be used. La variabile %SERVER_NAME% specifica il nome del server.The %SERVER_NAME% variable specifies the server name. Modificare questa variabile per specificare nome del server.Change this variable to specify your own server name. Il valore predefinito in questo file batch è localhost.The default value in this batch file is localhost.

    Il certificato viene memorizzato nell'archivio personale nel percorso di archivio LocalMachine.The certificate is stored in My (Personal) store under the LocalMachine store location.

    echo ************  
    echo Server cert setup starting  
    echo %SERVER_NAME%  
    echo ************  
    echo making server cert  
    echo ************  
    makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe  
    
  • Installazione del certificato server nell'archivio certificati attendibile del client:Installing the server certificate into the client's trusted certificate store:

    Le righe seguenti nel file batch Setup.bat copiano il certificato server nell'archivio di persone attendibile del client.The following lines in the Setup.bat batch file copy the server certificate into the client trusted people store. Questo passaggio è necessario perché certificati generati da Makecert.exe non sono considerati implicitamente attendibili dal sistema client.This step is required because certificates generated by Makecert.exe are not implicitly trusted by the client system. Se è già disponibile un certificato impostato come radice in un certificato radice client attendibile, ad esempio un certificato rilasciato da Microsoft, il popolamento dell'archivio certificati client con il certificato server non è necessario.If you already have a certificate that is rooted in a client trusted root certificate—for example, a Microsoft-issued certificate—this step of populating the client certificate store with the server certificate is not required.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r LocalMachine -s TrustedPeople  
    
  • Creazione del certificato emittente:Creating the issuer certificate.

    Le righe seguenti del file batch Setup.bat creano il certificato emittente da usare.The following lines from the Setup.bat batch file create the issuer certificate to be used. La variabile %USER_NAME% specifica il nome dell'emittente.The %USER_NAME% variable specifies the issuer name. Modificare questa variabile per specificare nome dell'emittente.Change this variable to specify your own issuer name. Il valore predefinito in questo file batch è Alice.The default value in this batch file is Alice.

    Il certificato viene memorizzato nell'archivio personale nel percorso di archivio LocalUser.The certificate is stored in My store under the CurrentUser store location.

    echo ************  
    echo Server cert setup starting  
    echo %SERVER_NAME%  
    echo ************  
    echo making server cert  
    echo ************  
    makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=%USER_NAME% -sky exchange -pe  
    
  • Installazione del certificato emittente nell'archivio certificati attendibile del server:Installing the issuer certificate into the server's trusted certificate store.

    Le righe seguenti nel file batch Setup.bat copiano il certificato server nell'archivio di persone attendibile del client.The following lines in the Setup.bat batch file copy the server certificate into the client trusted people store. Questo passaggio è necessario perché certificati generati da Makecert.exe non sono considerati implicitamente attendibili dal sistema client.This step is required because certificates generated by Makecert.exe are not implicitly trusted by the client system. Se è già disponibile un certificato che impostato come radice in un certificato radice client attendibile, ad esempio un certificato rilasciato da Microsoft, il passaggio della popolazione dell'archivio certificati server con il certificato emittente non è necessario.If you already have a certificate that is rooted in a client trusted root certificate—for example, a Microsoft-issued certificate—this step of populating the server certificate store with the issuer certificate is not required.

    certmgr.exe -add -r CurrentUser -s My -c -n %USER_NAME% -r LocalMachine -s TrustedPeople  
    

Per impostare e compilare l'esempioTo set up and build the sample

  1. Assicurarsi di avere eseguito la procedura di installazione singola per gli esempi di Windows Communication Foundation.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Per compilare la soluzione, seguire le istruzioni in compilazione degli esempi di Windows Communication Foundation.To build the solution, follow the instructions in Building the Windows Communication Foundation Samples.

Nota

Se si usa Svcutil.exe per rigenerare la configurazione di questo esempio, assicurarsi di modificare il nome dell'endpoint nella configurazione client in modo che corrisponda al codice client.If you use Svcutil.exe to regenerate the configuration for this sample, be sure to modify the endpoint name in the client configuration to match the client code.

Per eseguire l'esempio nello stesso computerTo run the sample on the same computer

  1. Aprire un prompt dei comandi di Visual Studio 2012Visual Studio 2012 con privilegi di amministratore ed eseguire Setup.bat dalla cartella di installazione dell'esempio.Run Setup.bat from the sample installation folder inside a Visual Studio 2012Visual Studio 2012 command prompt run with administrator privileges. In questo modo vengono installati tutti i certificati necessari per l'esecuzione dell'esempio.This installs all the certificates required for running the sample.

    Nota

    Il file batch Setup.bat è progettato per essere eseguito da un prompt dei comandi di Visual Studio 2012Visual Studio 2012.The Setup.bat batch file is designed to be run from a Visual Studio 2012Visual Studio 2012 Command Prompt. La variabile di ambiente PATH impostata nel prompt dei comandi di Visual Studio 2012Visual Studio 2012 punta alla directory che contiene file eseguibili richiesti dallo script Setup.bat.The PATH environment variable set within the Visual Studio 2012Visual Studio 2012 Command Prompt points to the directory that contains executables required by the Setup.bat script.

  2. Avviare Service.exe da service\bin.Launch Service.exe from service\bin.

  3. Avviare Client.exe da \client\bin.Launch Client.exe from \client\bin. L'attività del client viene visualizzata nella finestra dell'applicazione console.Client activity is displayed on the client console application.

  4. Se il client e il servizio non sono in grado di comunicare, vedere suggerimenti per la risoluzione dei problemi.If the client and service are not able to communicate, see Troubleshooting Tips.

Per eseguire l'esempio tra più computerTo run the sample across computers

  1. Creare una directory sul computer del servizio per i file binari del servizio.Create a directory on the service computer for the service binaries.

  2. Copiare i file di programma del servizio nella directory del servizio sul computer relativo.Copy the service program files to the service directory on the service computer. Copiare i file Setup.bat e Cleanup.bat nel computer del servizio.Also copy the Setup.bat and Cleanup.bat files to the service computer.

  3. È necessario disporre di un certificato server con il nome del soggetto che contiene il nome di dominio completo del computer.You must have a server certificate with the subject name that contains the fully-qualified domain name of the computer. Il file Service.exe.config deve essere aggiornato per riflettere il nome del nuovo certificato.The Service.exe.config file must be updated to reflect this new certificate name. È possibile creare il certificato server modificando il file batch Setup.bat.You can create server certificate by modifying the Setup.bat batch file. Si noti che è necessario eseguire il file setup.bat in un prompt dei comandi di Visual Studio aperto con privilegi di amministratore.Note that the setup.bat file must be run in a Visual Studio command prompt window opened with administrator privileges. È necessario impostare la variabile %SERVER_NAME% sul nome host completo del computer usato per ospitare il servizio.You must set the %SERVER_NAME% variable to the fully-qualified host name of the computer that is used to host the service.

  4. Copiare il certificato server nell'archivio CurrentUser-TrustedPeople del client.Copy the server certificate into the CurrentUser-TrustedPeople store of the client. Questo passaggio non è necessario quando il certificato server è emesso da un'autorità emittente client attendibile.This step is not necessary when the server certificate is issued by a client trusted issuer.

  5. Nel file Service.exe.config sul computer del servizio modificare il valore dell'indirizzo di base per specificare un nome del computer completo anziché localhost.In the Service.exe.config file on the service computer, change the value of the base address to specify a fully-qualified computer name instead of localhost.

  6. Sul computer del servizio eseguire Service.exe da un prompt dei comandi.On the service computer, run Service.exe from a command prompt.

  7. Copiare i file del programma client dalla cartella \client\bin, presente nella cartella specifica del linguaggio, nel computer client.Copy the client program files from the \client\bin\ folder, under the language-specific folder, to the client computer.

  8. Nel file Client.exe.config presente nel computer client modificare il valore dell'indirizzo della definizione dell'endpoint in base al nuovo indirizzo del servizio.In the Client.exe.config file on the client computer, change the address value of the endpoint to match the new address of your service.

  9. Sul computer client avviare Client.exe da una finestra del prompt dei comandi.On the client computer, launch Client.exe from a command prompt window.

  10. Se il client e il servizio non sono in grado di comunicare, vedere suggerimenti per la risoluzione dei problemi.If the client and service are not able to communicate, see Troubleshooting Tips.

Per eseguire la pulizia dopo l'esempioTo clean up after the sample

  1. Eseguire Cleanup.bat nella cartella degli esempi una volta completato l'esempio.Run Cleanup.bat in the samples folder once you have finished running the sample.

Vedere ancheSee Also