He creado con éxito un cliente WS que funciona correctamente cuando NO uso la autenticación.Agregando SOAP: HEADER nombre de usuario y contraseña con WSE 3.0
Sin embargo, el servidor (WebSphere) ahora requiere agregar un token de nombre de usuario de seguridad ws, y estoy teniendo dificultades para hacerlo. El mensaje SOAP resultante se supone que debe ser algo como esto:
<soapenv:Envelope
xmlns:ns="http://foo.bar/1.0"
xmlns:ns1="http://www.witsml.org/schemas/140"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>foo</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bar</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">foooooobar==</wsse:Nonce>
<wsu:Created>2010-01-25T13:09:24.860Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ns:fooBar>...</ns:fooBar>
</soapenv:Body>
he descargado e instalado el SDK de Microsoft WSE 3.0 y ha añadido una referencia a la DLL en mi proyecto de Visual Studio 2005.
Ahora tengo acceso a los espacios de nombres de Microsoft.Web.Services3. *, Pero actualmente estoy perplejo sobre cómo proceder.
El código de cliente se ha generado automáticamente por un web de referencia, por lo que sólo hacer una pequeña cantidad de trabajo para enviar el mensaje al servidor no autenticado:
WS.FooResultHttpService ws = new WS.FooResultHttpService();
ws.Url = "http://foo.bar.baz";
ws.SendSomething(message);
que he empezado a investigar usando Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager
, pero hasta ahora no he podido poner nada en marcha.
Cualquier sugerencia sería muy apreciada, ya que parece que no puedo encontrar ninguna buena receta en la red.
Gracias!
¡Gracias, esto fue muy útil! – csl
+1 muy útil. Tenía proxy de generación de problemas usando WseWsdl3.exe en VS2010, esto se solucionó al agregar una entrada en el registro. Agregue una clave de cadena llamada "sdkInstallRootv2.0" en HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ con el valor "C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v6.0A" – Siva