2015-06-09 31 views
5

Próbuję skonfigurować klienta (aplikacja internetowa) i usługę (usługa WCF), która będzie komunikować się za pomocą funkcji WSHttpBinding. Wygląda na to, że aby użyć tego powiązania, klient wysyła wstępne komunikaty w celu ustawienia kanału.Dodaj nagłówek do żądania WCF RequestSecurityToken

Pomiędzy klientem a usługą istnieje magistrala usług, która prowadzi do niestandardowego nagłówka. Komunikat, w przypadku korzystania z zabezpieczeń BasicHttpBinding, trasy bez problemu.

Moje pytanie brzmi: czy istnieje sposób na dodanie tego samego niestandardowego nagłówka do wstępnej wiadomości RequestSecurityToken?

Z góry dziękuję.

+0

Czy nagłówek ma być częścią komunikatu RST, albo mówisz nagłówku HTTP? – mclark1129

+0

Chciałbym uczynić go częścią nagłówka wiadomości mydła RST. – hunda27

Odpowiedz

1

Rozwiązany problem.

Niestety, zgodnie z dokumentacją MSDN, usługa korzystająca z zabezpieczeń transportu WCF nie może przejść przez router, ani też nie może być zlokalizowana w Internecie (https://msdn.microsoft.com/en-us/library/ff648863.aspx#TransportSecurity).

Chcieliśmy naruszyć obie "zasady".

Aby zmniejszyć liczbę komunikatów, z pięciu wywołań i odpowiedzi na jedno, przełączyliśmy się na usługę Message Security i wyłączyliśmy EstablishSecurityContext i NegotiateServiceCredential. - Musiało to nastąpić zarówno w ustawieniach konfiguracji Usługi i Klienta.

Ponadto warto zauważyć, że aby wskazać usługę naszej magistrali usług, zmieniliśmy usługę ClientViaBehavior usługi po stronie klienta.

Wyłącz EstablishContext i NegotiateServiceCredential: Klient

WSHttpBinding binding = new WSHttpBinding(); 

binding.Security.Mode = SecurityMode.Message; 
binding.Security.Message.EstablishSecurityContext = false; 
binding.Security.Message.NegotiateServiceCredential = false; 

punktu do magistrali usług:

serviceClient.Endpoint.EndpointBehaviors.Add(new ClientViaBehavior(new Uri("http://url/WCFService/ServiceName.svc")));