0

J'ai la configuration suivante pour mon service qui fonctionne correctement. Le problème apparaît lorsque j'ai besoin de modifier la valeur de MaxClockSkew dans wsHttpBinding avec le mode de sécurité TransportWithMessageCredential. Comment puis-je modifier la valeur MaxClockSkew dans cette configuration?Configurer MaxClockSkew dans wsHttpBinding avec le mode de sécurité TransportWithMessageCredential

Comment modifier la valeur MaxClockSkew dans cette configuration?

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="HttpsService_wsHttpBinding" closeTimeout="01:10:00" 
      openTimeout="01:10:00" receiveTimeout="Infinite" sendTimeout="Infinite" 
      maxBufferPoolSize="999999999" maxReceivedMessageSize="99999999"> 
      <readerQuotas maxDepth="999999999" maxStringContentLength="999999999" 
      maxArrayLength="999999999" maxBytesPerRead="999999999" maxNameTableCharCount="999999999" /> 
      <reliableSession inactivityTimeout="Infinite" enabled="true" /> 
      <security mode="TransportWithMessageCredential"> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service name="WcfServiceApp.Service1"> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="HttpsService_wsHttpBinding" 
      name="wsHttpEndPoint" contract="CommonTypes.IService" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" 
       customUserNamePasswordValidatorType="CommonTypes.CustomValidator, CommonTypes" /> 
      </serviceCredentials> 
      <dataContractSerializer maxItemsInObjectGraph="2147483646" /> 
      <bufferedReceive maxPendingMessagesPerChannel="2147483647" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <diagnostics wmiProviderEnabled="true"> 
     <messageLogging 
      logEntireMessage="true" 
      logMalformedMessages="true" 
      logMessagesAtServiceLevel="true" 
      logMessagesAtTransportLevel="true" 
      maxMessagesToLog="3000" 
     /> 
    </diagnostics> 
    </system.serviceModel> 

Répondre

2

Sur la base des informations contenues dans ce post, il semble que vous ne pouvez pas modifier la propriété maxClockSkew sur une norme (à savoir, WCF fourni) obligatoire, vous avez besoin d'utiliser une liaison personnalisée. Quelque chose comme ceci:

<system.serviceModel> 
    <bindings> 
    <customBinding> 
     <binding name="HttpsService_wsHttpBinding" 
       closeTimeout="01:10:00" 
       openTimeout="01:10:00" 
       receiveTimeout="Infinite" 
       sendTimeout="Infinite"> 
     <reliableSession inactivityTimeout="Infinite" 
         enabled="true" /> 
     <security authenticationMode="SecureConversation"> 
      <secureConversationBootstrap authenticationMode="UserNameOverTransport" /> 
      <localServiceSettings maxClockSkew="00:30:00" /> 
     </security> 
     <textMessageEncoding messageVersion="soap12"> 
      <readerQuotas maxDepth="999999999" 
         maxStringContentLength="999999999" 
         maxArrayLength="999999999" 
         maxBytesPerRead="999999999" 
         maxNameTableCharCount="999999999" /> 
     </textMessageEncoding> 
     <httpsTransport maxBufferPoolSize="999999999" 
         maxReceivedMessageSize="99999999" /> 
     </binding> 
    <customBinding> 
    </bindings> 
</system.serviceModel> 

Notez que le décalage de l'horloge est réglée dans la section <security> avec l'attribut de l'élément <localServiceSettings>maxClockSkew (dans cet exemple, 30 minutes). Les liaisons personnalisées peuvent être un peu intimidantes et/ou déroutantes au premier abord, mais un examen attentif de l'exemple ci-dessus et l'utilisation de MSDN seront utiles.

CustomBindings est un bon point de départ, et notez que l'article indique un ordre spécifique pour les éléments.

Pour un aperçu des éléments et des attributs de la section config, vous pouvez regarder ici: <customBinding>.

Vous devrez également définir la propriété maxClockSkew sur la liaison personnalisée du client à la même valeur que le service, je crois.