2010-08-08 2 views
5

Почти все (защищенные) конечные точки WCF-сервиса в моем приложении, если системные часы клиента установлены слишком далеко в будущем или в прошлом, я получаю исключение из механизма WCW Clock Skew (описанного здесь: http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/).Почему моя конечная точка WCF не выбрасывает исключение Max Clock Skew?

Однако одна конечная точка, в которой реализован мой метод Login(), никогда не выдает это исключение, даже несмотря на то, что она имеет транспортную безопасность (естественно, для нее не требуются учетные данные).

Почему для этой конечной точки не работает механизм «Механизм синхронизации часов»? Может быть, это потому, что для clientCredentialType установлено значение «Нет»?

В качестве примера, вот упрощенная версия моей конфигурации:

<services> 
    <service name="Foo"> 
     <endpoint address="" 
      binding="wsHttpBinding" 
      bindingConfiguration="binding1" 
      contract="IFoo" /> 
    </service> 
</services> 

<bindings> 
    <wsHttpBinding> 
     <binding name="binding1" maxReceivedMessageSize="100000000"> 
      <readerQuotas maxDepth="1000000000" maxArrayLength="1000000000" maxStringContentLength="1000000000" /> 
      <security mode="Transport"> 
       <transport clientCredentialType ="None"/> 
      </security> 
      <reliableSession enabled="false" /> 
     </binding> 
    </wsHttpBinding>  
</bindings>  

ответ

2

Режим безопасности - режим безопасности = «Транспорт» - не содержит отметку времени в сообщении, которая заставляет проверку MaxClockSkew игнорировать сообщение и не вызывает исключение безопасности. Измените режим безопасности на режим безопасности = «TransportWithMessageCredential», который включает отметки времени и позволяет проверке MaxClockSkew проверять сообщение на временную дельта.

1

Другие люди имеют подобную проблему:

Triggering MaxClockSkew when accessing WCF service

Так что я не думаю, что это проблема с вашей конфигурации.

Похоже, что если он не использует машинное время, он не проверяет, существует ли разница во времени между машинами.

Вы можете запрограммировать свой путь вокруг него, отправить машинное время клиента в качестве параметра в вашем методе входа, если он отличается, выкинуть исключение.

 Смежные вопросы

  • Нет связанных вопросов^_^