2009-08-07 15 views
6

Ho difficoltà a connettersi a un servizio Web WSE 3.0 di terze parti da un client WCF. Ho implementato la classe personalizzata obbligatorio, come indicato in questo articolo KB:Connessione a un servizio Web WSE 3.0 da un client WCF

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

Il problema sembra avere a che fare con l'affermazione di sicurezza utilizzata dal servizio Web - UsernameOverTransport.

Quando tento di chiamare un metodo, ottengo la seguente eccezione:

System.InvalidOperationException:. L' 'WseHttpBinding' '[namespace]' vincolante per il 'MyWebServiceSoap' '[. namespace] Il contratto ' è configurato con una modalità di autenticazione che richiede l'integrità del livello di trasporto e la riservatezza . Tuttavia il trasporto non può fornire l'integrità e la riservatezza ..

E 'in attesa di un nome utente, password, e il numero di CN. Nel codice di esempio fornito dal fornitore, queste credenziali sono raggruppate in un Microsoft.Web.Services3.Security.Tokens.UsernameToken. Ecco l'esempio fornito dal venditore:


Questo funziona bene da un'applicazione 2,0 w ​​/ WSE 3.0 installato. Ecco un frammento di codice dal mio cliente 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 

Ho perlustrato il web alla ricerca di una risposta a questa domanda. Alcune fonti mi avvicinano (come l'articolo MS KB), ma non riesco a superare la gobba. Qualcuno mi può aiutare?

+0

Solo per essere sicuri, la terza parte sa che WSE è obsoleto? –

+0

Sei stato in grado di risolvere questo? Qualcuno ha un'idea? Sono attualmente bloccato sulla stessa cosa. –

risposta

1

Il messaggio di errore si riferisce a Livello di trasporto Sicurezza, che in genere significa https.

Non hai mostrato i tuoi file di configurazione. Ma suppongo che tu abbia configurato la sicurezza per il trasporto (o che sia richiesta come una conseguenza di un'altra scelta) e abbia usato un indirizzo http invece di https.

+0

Ciao Shiraz, grazie per aver risposto. Sto definendo SecurityAssertion come UserNameOverTransport in modo programmatico nel codice che ho fornito sopra. Il servizio web non usa https, quindi non credo che questo sia il problema. –

+0

Penso che questo sia il motivo per cui stai ricevendo l'errore. Si sta inviando il nome utente/password al trasporto, WCF quindi vede che la password andrà oltre il cavo non crittografato e si rifiuta di avviare il servizio. –

+0

Sembra che sarebbe una grande differenza tra WSE3.0 e WCF, quindi. Posso usare un client WSE 3.0 senza SSL per connettermi al mio servizio WSE3, ma un client WCF non si collegherà con lo stesso messaggio che Dave ha nel suo esempio. –

9

ho avuto successo in un caso simile con la seguente configurazione di legame:

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

auguro che funziona anche per te.

Problemi correlati