2013-01-09 27 views
9

Próbuję uzyskać dostęp do klienta wcf. Wiem, że ludzie uzyskują teraz informacje, więc wiem, że to działa. Mój problem polega na tym, że nie mogę tego zmazać. Usługa jest wzajemną usługą certyfikacyjną. Posiadam odpowiednie certyfikaty w moich osobistych sklepach na mojej lokalnej maszynie. Nawet z tym, pojawia się następujący wyjątek:SSPI: nazwa zasady użytkownika Klient WCF

A call to SSPI failed, see inner exception 

Szukanie głąb wyjątku i widzę to:

Message : The target principal name is incorrect 

Jak mogę rozwiązać ten problem? Czy muszę podszywać się pod użytkownika, z którego uruchamiana jest pula aplikacji? Czy muszę dodać Identity \ ServicePrincipleName lub Identity \ UserPrincipleName? Czy ktoś napotkał problem podobny do tego?

Odpowiedz

0

Zregenerowałem klienta, a punkt końcowy w pliku output.config miał teraz <identity> <userPrincipalName value="[email protected]" /> </identity> w znaczniku Endpoint Tag. Tak więc nowy punkt końcowy wyglądał -

<endpoint address="net.tcp://machinename:6001/ReferenceDataService" binding="netTcpBinding" bindingConfiguration="netTcpBindingConf" contract="IReferenceDataService" > 
    <identity> 
<userPrincipalName value="[email protected]" /> 

to rozwiązało mój problem

+0

Jeśli ktoś nie jest zaznajomiony z WCF - użyłem svcutil.exe, aby zregenerować klienta i wygenerowano plik output.config. – rhinobear

0

Dla mnie to działało kiedy podano nazwę użytkownika serwera w punkcie końcowym. Nie nazwa użytkownika klienta. I to była UPN, a nie SPN.

new EndpointAddress(
    new Uri("net.tcp://server:1234/MyWcf/svc"), 
     EndpointIdentity.CreateUpnIdentity("[email protected]")) 

Z tego co rozumiem, klient weryfikuje, czy rozmawia z oczekiwanym użytkownikiem.