Procedura: configurare i servizi WCF per interagire con i client WSE 3.0

I servizi Windows Communication Foundation (WCF) sono compatibili a livello di rete con i client Web Services Enhancements 3.0 for Microsoft .NET (WSE) se tali servizi WCF sono configurati per utilizzare la versione dell'agosto 2004 della specifica WS-Addressing.

Per consentire a un servizio WCF di interagire con i client WSE 3.0

  1. Definire un'associazione personalizzata per il servizio WCF.

    Per specificare l'utilizzo della versione dell'agosto 2004 della specifica WS-Addressing per la codifica dei messaggi, è necessario creare un'associazione personalizzata.

    1. Aggiungere un customBinding Element figlio ad <Bindings> del file di configurazione del servizio.

    2. Specificare un nome per l'associazione aggiungendo un binding element all'customBinding Element e impostando l'attributo name.

    3. Specificare una modalità di autenticazione e la versione delle specifiche WS-Security utilizzate per proteggere i messaggi compatibili con WSE 3.0, aggiungendo un Security element figlio all'binding element.
      Per impostare la modalità di autenticazione, impostare l'attributo authenicationMode dell'Security element. Una modalità di autenticazione equivale approssimativamente a un'asserzione di protezione turnkey in WSE 3.0. Nella tabella seguente le modalità di autenticazione di WCF vengono mappate alle asserzioni di protezione turnkey di WSE 3.0.

      Modalità di autenticazione WCF Asserzione di protezione turnkey WSE 3.0

      AnonymousForCertificate

      anonymousForCertificateSecurity

      Kerberos

      kerberosSecurity

      MutualCertificate

      mutualCertificate10Security*

      MutualCertificate

      mutualCertificate11Security*

      UserNameOverTransport

      usernameOverTransportSecurity

      UserNameForCertificate

      usernameForCertificateSecurity

      * Una delle differenze principali tra le asserzioni di protezione turnkey mutualCertificate10Security e mutualCertificate11Security è la versione della specifica WS-Security utilizzata da WSE per proteggere i messaggi SOAP. Per mutualCertificate10Security viene utilizzata la versione WS-Security 1.0, mentre per mutualCertificate11Security viene utilizzata la versione WS-Security 1.1. Per WCF, la versione della specifica WS-Security viene definita nell'attributo messageSecurityVersion dell'Security element.
      Per impostare la versione della specifica WS-Security utilizzata per proteggere i messaggi SOAP, impostare l'attributo messageSecurityVersion dell'Security element. Per interagire con WSE 3.0, impostare il valore dell'attributo messageSecurityVersion su WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10.

    4. Specificare l'utilizzo della versione dell'agosto 2004 della specifica WS-Addressing da parte di WCF aggiungendo un textMessageEncoding element e impostare messageVersion sul relativo valore nella classe Soap11WSAddressingAugust2004.

      Nota

      Quando si utilizza SOAP 1.2, impostare l'attributo messageVersion su Soap12WSAddressingAugust2004.

  2. Specificare l'utilizzo dell'associazione personalizzata da parte del servizio.

    1. Impostare l'attributo binding dell'elemento Service Endpoint su customBinding.
    2. Impostare l'attributo bindingConfiguration dell'elemento Service Endpoint sul valore specificato nell'attributo name dell'binding element per l'associazione personalizzata.

Esempio

Nell'esempio di codice seguente viene specificato che Service.HelloWorldService utilizza un'associazione personalizzata per interagire con i client WSE 3.0. L'associazione personalizzata specifica che per la codifica dei messaggi scambiati viene utilizzata la versione dell'agosto 2004 dell'insieme di specifiche WS-Addressing e WS-Security 1.1. I messaggi vengono protetti utilizzando la modalità di autenticazione AnonymousForCertificate.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        behaviorConfiguration="ServiceBehavior" 
        name="Service.HelloWorldService">
        <endpoint binding="customBinding" address=""
          bindingConfiguration="ServiceBinding"
          contract="Service.IHelloWorld"></endpoint>
      </service>
    </services>

    <bindings>
      <customBinding>
        <binding name="ServiceBinding">
          <security authenticationMode="AnonymousForCertificate"
                  messageProtectionOrder="SignBeforeEncrypt"
                  messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
                  requireDerivedKeys="false">
          </security>
          <textMessageEncoding messageVersion ="Soap11WSAddressingAugust2004"></textMessageEncoding>
          <httpTransport/>
        </binding>
      </customBinding>
    </bindings>
    <behaviors>
      <behavior name="ServiceBehavior" returnUnknownExceptionsAsFaults="true">
        <serviceCredentials>
          <serviceCertificate findValue="CN=WCFQuickstartServer" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectDistinguishedName"/>
        </serviceCredentials>
      </behavior>
    </behaviors>
  </system.serviceModel>
</configuration>

Vedere anche

Attività

Procedura: personalizzare un'associazione fornita dal sistema