2009-08-07 11 views
6

Mam trudności z połączeniem się z usługą GPW trzeciej firmy innej niż klient WCF. I wprowadziły klasę zwyczaj wiązania, jak wskazano w tym artykule KB:Łączenie się z usługą WWW GPW 3.0 Od klienta WCF

http://msdn.microsoft.com/en-us/library/ms734745.aspx

Problem wydaje się mieć do czynienia z twierdzeniem zabezpieczeń używany przez usługę internetową - UsernameOverTransport.

Gdy próbuję wywołać metodę, pojawia się następujący wyjątek:

System.InvalidOperationException. The 'WseHttpBinding' '[nazw]' wiążące dla 'MyWebServiceSoap' "[. namespace] ' umowa jest skonfigurowana w trybie uwierzytelniania , który wymaga integralności poziomu transportowego i poufności . Jednak transport nie może zapewnić integralność i poufność ..

ona spodziewa się nazwę użytkownika, hasło i numer CN. W przykładowym kodzie dostarczonym nam przez sprzedawcę te poświadczenia są pakowane w plik Microsoft.Web.Services3.Security.Tokens.UsernameToken. Oto przykład dostarczane przez sprzedawcę:


Działa to dobrze z aplikacją 2,0 W/WSE 3.0 zainstalowany. Oto fragment kodu z mojego klienta WCF:

EndpointAddress address = new EndpointAddress(new Uri("<web service uri here>")); 

WseHttpBinding binding = new WseHttpBinding(); // This is the custom binding I created per the MS KB article 

binding.SecurityAssertion = WseSecurityAssertion.UsernameOverTransport; 
binding.EstablishSecurityContext = false; 

// Not sure about the value of either of these next two 
binding.RequireDerivedKeys = true; 
binding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt; 

MembershipServiceSoapClient proxy = new MembershipServiceSoapClient(binding, address); 

// This is where I believe the problem lies – I can’t seem to properly setup the security credentials the web service is expecting 

proxy.ClientCredentials.UserName.UserName = "username"; 
proxy.ClientCredentials.UserName.Password = "pwd"; 
// How do I supply the CN number?      

MyObject mo = proxy.MyMethod(); // this throws the exception 

mam prana sieć w poszukiwaniu odpowiedzi na to pytanie. Niektóre źródła przybliżają mnie do siebie (jak artykuł MS KB), ale nie wydaje mi się, żebym przeszedł przez garb. Czy ktoś może mi pomóc?

+0

Tylko dla pewności, czy Twoja trzecia strona wie, że GPW jest przestarzała? –

+0

Czy zdołałeś rozwiązać ten problem? Czy ktoś ma pomysł? Obecnie utknąłem na tym samym. –

Odpowiedz

1

Komunikat o błędzie odnosi się do Poziom transportu Bezpieczeństwo, zazwyczaj oznacza to https.

Nie pokazałeś swoich plików konfiguracyjnych. Ale domyślam się, że skonfigurowałeś zabezpieczenia do transportu (lub jest to wymagane jako konsekwencja innego wyboru) i używał adresu, który jest http zamiast https.

+0

Cześć Shiraz, dziękuję za odpowiedź. Definiuję SecurityAssertion jako UserNameOverTransport programowo w kodzie podanym powyżej. Usługa internetowa nie używa protokołu https, więc nie uważam, że to jest problem. –

+0

Myślę, że właśnie dlatego otrzymujesz błąd. Wysyłasz nazwę użytkownika/hasło przez transport, WCF następnie widzi, że hasło przejdzie przez przewód niezaszyfrowany i odmówi uruchomienia usługi. –

+0

Wydaje się, że byłaby to główna różnica między WSE3.0 i WCF, a następnie. Mogę użyć klienta GPW 3.0 bez SSL, aby połączyć się z moją usługą WSE3, ale klient WCF nie połączy się z tą samą wiadomością, którą dostał Dave w swojej próbce. –

9

miałem sukces w podobnym przypadku z poniższej konfiguracji Oprawa:

<bindings> 
    <customBinding> 
     <binding name="FNCEWS40MTOMBinding"> 
     <security enableUnsecuredResponse="true" authenticationMode="UserNameOverTransport" 
        allowInsecureTransport="true" messageProtectionOrder="SignBeforeEncrypt"> 
      <secureConversationBootstrap /> 
     </security> 
     <mtomMessageEncoding messageVersion="Soap12WSAddressingAugust2004" 
           maxBufferSize="2147483647" /> 
     <httpTransport maxReceivedMessageSize="2147483647" /> 
    </binding> 
    </customBinding> 
</bindings> 

nadzieję, że pracuje dla Ciebie.

Powiązane problemy