Freigeben über


Gewusst wie: Festlegen der maximalen Zeitdehnung (Uhrabweichung)

Zeitkritische Funktionen können behindert werden, wenn zwei Computer unterschiedliche Uhreinstellungen aufweisen. Um diese Gefahr zu umgehen, können Sie für die MaxClockSkew-Eigenschaft einen TimeSpan-Wert festlegen. Diese Eigenschaft ist für zwei Klassen verfügbar:

LocalClientSecuritySettings

LocalServiceSecuritySettings

Wichtig   Für eine sichere Konversation müssen Änderungen an der MaxClockSkew-Eigenschaft vorgenommen werden, wenn das Bootstrapping für den Client oder Dienst aktiv ist. Legen Sie hierzu die Eigenschaft auf das vom BootstrapSecurityBindingElement zurückgegebene SecurityBindingElement fest.

Um die Eigenschaft bei einer der vom System bereitgestellten Bindungen zu ändern, suchen Sie das Sicherheitsbindungselement in der Bindungsauflistung und legen für die MaxClockSkew-Eigenschaft einen neuen Wert fest. Von SecurityBindingElement werden zwei Klassen abgeleitet: SymmetricSecurityBindingElement und AsymmetricSecurityBindingElement. Wenn Sie die Sicherheitsbindung aus der Auflistung abrufen, müssen Sie eine Umwandlung in einen dieser Typen durchführen, damit die MaxClockSkew-Eigenschaft richtig festgelegt werden kann. Im folgenden Beispiel wird eine WSHttpBinding verwendet, die die SymmetricSecurityBindingElement-Klasse nutzt. Eine Liste der Sicherheitsbindungsarten, die mit den einzelnen vom System bereitgestellten Bindungen verwendet werden müssen, finden Sie unter Vom System bereitgestellte Bindungen.

So erstellen Sie eine benutzerdefinierte Bindung mit einem neuen Zeitdehnungswert im Code

  1. Hinweis   Fügen Sie Verweise auf die folgenden Namespaces im Code hinzu: System.ServiceModel.Channels, System.ServiceModel.Description, System.Security.Permissions und System.ServiceModel.Security.Tokens.

    Erstellen Sie eine Instanz einer WSHttpBinding-Klasse, und legen Sie als Sicherheitsmodus Message fest.

  2. Erstellen Sie eine neue Instanz der BindingElementCollection-Klasse durch Aufruf der CreateBindingElements-Methode.

  3. Suchen Sie mit der Find-Methode der BindingElementCollection-Klasse nach dem Sicherheitsbindungselement.

  4. Bei Verwendung der Find-Methode führen Sie eine Umwandlung in den tatsächlichen Typ durch. Im folgenden Beispiel wird eine Umwandlung in den SymmetricSecurityBindingElement-Typ vorgenommen.

  5. Legen Sie für das Sicherheitsbindungselement die MaxClockSkew-Eigenschaft fest.

  6. Erstellen Sie einen ServiceHost mit geeignetem Diensttyp und entsprechender Basisadresse.

  7. Fügen Sie mit der AddServiceEndpoint-Methode einen Endpunkt hinzu, und nehmen Sie die CustomBinding auf.

So legen Sie MaxClockSkew in der Konfiguration fest

  1. Erstellen Sie ein customBinding Element im <Bindings>-Elementabschnitt.

  2. Erstellen Sie ein <binding>-Element, und legen Sie für das name-Attribut einen geeigneten Wert fest. Im folgenden Beispiel wird das Attribut auf den Wert MaxClockSkewBinding festgelegt.

  3. Fügen Sie ein Verschlüsselungselement hinzu. Im folgenden Beispiel wird ein textMessageEncoding element hinzugefügt.

  4. Fügen Sie ein security Element of customBinding-Element hinzu, und legen Sie das authenticationMode-Attribut auf einen geeigneten Wert fest. Im folgenden Beispiel wird das Attribut auf Kerberos festgelegt, um anzugeben, dass der Dienst die Windows-Authentifizierung verwendet.

  5. Fügen Sie ein localServiceSettings element hinzu, und legen Sie für das maxClockSkew-Attribut einen Wert im Format "##:##:##" fest. Im folgenden Beispiel werden sieben Minuten eingestellt. Fügen Sie wahlweise ein localServiceSettings element hinzu, und legen Sie für das maxClockSkew-Attribut eine geeignete Einstellung fest.

  6. Fügen Sie ein Transportelement hinzu. Im folgenden Beispiel wird ein httpTransport element verwendet.

  7. Für eine sichere Konversation müssen die Sicherheitseinstellungen beim Bootstrap im secureConversationBootstrap-Element auftreten.

    <bindings>
      <customBinding>
        <binding name="MaxClockSkewBinding">
            <textMessageEncoding />
            <security authenticationMode="Kerberos">
               <localClientSettings maxClockSkew="00:07:00" />
               <localServiceSettings maxClockSkew="00:07:00" />
               <secureConversationBootstrap>
                  <localClientSettings maxClockSkew="00:30:00" />
                  <localServiceSettings maxClockSkew="00:30:00" />
               </secureConversationBootstrap>
            </security>
            <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    

Siehe auch

Referenz

LocalClientSecuritySettings
LocalServiceSecuritySettings
CustomBinding

Konzepte

Gewusst wie: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement