Freigeben über


Vorgehensweise: Konfigurieren von WCF-Diensten für die Zusammenarbeit mit WSE3.0-Clients

Windows Communication Foundation (WCF)-Dienste sind auf niedriger Ebene mit Clients von Web Services Enhancements 3.0 für Microsoft .NET (WSE) kompatibel, wenn WCF-Dienste für die Verwendung der Version der WS-Addressing-Spezifikation vom August 2004 konfiguriert sind.

So konfigurieren Sie einen WCF-Dienst für die Zusammenarbeit mit WSE3.0-Clients

  1. Definieren Sie eine benutzerdefinierte Bindung für den WCF-Dienst.

    Es muss eine benutzerdefinierte Bindung erstellt werden, um anzugeben, dass die Version der WS-Adressierungsspezifikation vom August 2004 für die Nachrichtencodierung verwendet wird.

    1. Fügen Sie den <Bindungen> der Konfigurationsdatei des Diensts ein untergeordnetes <customBinding> hinzu.

    2. Geben Sie einen Namen für die Bindung an, indem Sie dem <customBinding> eine <Bindung> hinzufügen und das Attribut name festlegen.

    3. Geben Sie einen Authentifizierungsmodus und die Version der WS-Sicherheitsspezifikationen an, die zum Schutz von mit WSE 3.0 kompatiblen Nachrichten verwendet werden. Fügen Sie dazu der <Bindung> ein untergeordnetes <security> hinzu.

      Zum Festlegen des Authentifizierungsmodus legen Sie das Attribut authenticationMode der <Sicherheit> fest. Ein Authentifizierungsmodus ist mit einer sofort verwendbaren WSE 3.0-Sicherheitsassertion vergleichbar. In der folgenden Tabelle werden die Authentifizierungsmodi in WCF sofort verwendbaren WSE 3.0-Sicherheitsassertions zugeordnet.

      WCF-Authentifizierungsmodus Sofort verwendbare WSE 3.0-Sicherheitsassertion
      AnonymousForCertificate anonymousForCertificateSecurity
      Kerberos kerberosSecurity
      MutualCertificate mutualCertificate10Security*
      MutualCertificate mutualCertificate11Security*
      UserNameOverTransport usernameOverTransportSecurity
      UserNameForCertificate usernameForCertificateSecurity

      * Einer der Hauptunterschiede zwischen mutualCertificate10Security und sofort verwendbaren mutualCertificate11Security-Sicherheitsassertions ist die Version der WS-Sicherheitsspezifikation, die WSE zum Schutz der SOAP-Nachrichten verwendet. Für mutualCertificate10Security wird WS-Security 1.0 verwendet, wohingegen WS-Security 1.1 für mutualCertificate11Security verwendet wird. Bei WCF wird die Version der WS-Sicherheitsspezifikation im Attribut messageSecurityVersion der <Sicherheit> angegeben.

      Zum Festlegen der Version der WS-Sicherheitsspezifikation, die zum Schutz von SOAP-Nachrichten verwendet wird, legen Sie das Attribut messageSecurityVersion der <Sicherheit> fest. Für die Zusammenarbeit mit WSE 3.0 legen Sie den Wert des messageSecurityVersion-Attributs auf WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10 fest.

    4. Geben Sie an, dass die Version der WS-Addressing-Spezifikation vom August 2004 von WCF verwendet wird, indem Sie <textMessageEncoding> hinzufügen und für messageVersion den Wert Soap11WSAddressingAugust2004 festlegen.

      Hinweis

      Wenn Sie SOAP 1.2 verwenden, legen Sie das messageVersion-Attribut auf Soap12WSAddressingAugust2004 fest.

  2. Geben Sie an, dass der Dienst die benutzerdefinierte Bindung verwendet.

    1. Legen Sie das Attribut binding des <Endpunkt>-Elements auf customBinding fest.

    2. Legen Sie das Attribut bindingConfiguration des <Endpunkt>-Elements auf den im Attribut name der <Bindung> für die benutzerdefinierte Bindung angegebenen Wert fest.

Beispiel

Das folgende Codebeispiel gibt an, dass Service.HelloWorldService eine benutzerdefinierte Bindung zur Zusammenarbeit mit WSE 3.0-Clients verwendet. Die benutzerdefinierte Bindung gibt an, dass die Version der WS-Adressierungsspezifikation vom August 2004 und die Spezifikationen von WS-Security 1.1 zum Codieren der ausgetauschten Nachrichten verwendet werden. Die Nachrichten werden mit dem AnonymousForCertificate-Authentifizierungsmodus geschützt.

<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>

Siehe auch