2010-08-08 11 views
5

Z prawie wszystkimi (bezpiecznymi) punktami końcowymi usługi WCF w mojej aplikacji, jeśli zegar systemu klienta jest ustawiony zbyt daleko w przyszłości lub w przeszłości, otrzymuję wyjątek od mechanizmu skoku zegara WCF (opisanego tutaj: http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/).Dlaczego mój punkt końcowy WCF nie generuje wyjątku Maks. Odchylenie zegara?

Jednak jeden punkt końcowy, w którym zaimplementowana jest moja metoda Login(), nigdy nie generuje tego wyjątku, mimo że jest włączone zabezpieczenie transportu (oczywiście nie są wymagane żadne poświadczenia).

Dlaczego ten "punkt końcowy" nie działa? Może dlatego, że clientCredentialType jest ustawiony na "Brak"?

Jako przykład, oto uproszczona wersja mojej konfiguracji:

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

Odpowiedz

2

Tryb bezpieczeństwa - tryb bezpieczeństwa = "Transport" - nie zawiera sygnatury czasowej w komunikacie, które powodują, że walidacja MaxClockSkew ignoruje komunikat i nie zgłasza wyjątku bezpieczeństwa. Zmień tryb zabezpieczeń na tryb zabezpieczeń = "TransportWithMessageCredential", który zawiera znaczniki czasu i zezwala na sprawdzenie poprawności MaxClockSkew, aby przetestować komunikat w przypadku delty czasu.

1

Inni ludzie mają podobny problem:

Triggering MaxClockSkew when accessing WCF service

Więc nie sądzę, że jest to problem twoja konfiguracja.

Wygląda na to, że jeśli nie używa czasu maszynowego, nie sprawdza, czy między maszynami występuje różnica czasu.

Można programować na swój sposób, wysłać czas maszyny klienta jako parametr w metodzie logowania, jeśli jest inny, wyrzuć wyjątek.

Powiązane problemy