2012-02-29 46 views
5

Estoy intentando consumir un servicio web utilizando Delphi 2010 e Indy. Para establecer un flujo SOAP utilizable para compararlo con el creado por mi programa, estoy probando en SOAPUI. Estoy usando una secuencia SOAP proporcionada por el proveedor de servicios web que también coincide con la secuencia SOAP especificada en el archivo WSDL. Recibo un error HTTP 400 (solicitud incorrecta) del servicio.Solicitud incorrecta en SOAPUI

Según lo que puedo encontrar en línea, parece que recibir un error HTTP 400 indica que su solicitud SOAP está mal formada y el servicio web no puede leerla. He probado mi secuencia SOAP usando XMLPad y el XML parece estar bien formado. Supongo que esto puede significar que algo no coincide con su requisito de esquema. Primero comprobaré la descripción del esquema para la contraseña en caso de que no se envíe como texto sin formato. ¿Qué más debería estar revisando para eliminar un error HTTP 400?

Aquí es mi pedido (menos nombre de usuario y contraseña) en caso de que ayuda:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:xop="http://www.w3.org/2004/08/xop/include" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://wwww3.org/2001/XMLSchema-instance"> 
    <soap:Header> 
     <wsa:Action>http://edd.ca.gov/SendTransmission</wsa:Action> 
     <wsa:MessageID>urn:uuid:5aa788dc-86e1-448b-b085-2d2743cf9f26</wsa:MessageID> 
     <wsa:ReplyTo> 
     <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address> 
     </wsa:ReplyTo> 
     <wsa:To>http://fsettestversion.edd.ca.gov/fsetproxy/fsetservice.asmx</wsa:To> 
     <wsse:Security soap:mustUnderstand="1"> 
     <wsse:UsernameToken wsu:Id="UsernameToken"> 
      <wsse:Username>#USERNAME#</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">#PASSWORD#/wsse:Password> 
      <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">O5QWht1bslLCX6KnlEypAA==</wsse:Nonce> 
      <wsu:Created>2012-02-29T22:32:38.250Z</wsu:Created> 
     </wsse:UsernameToken> 
     <wsu:Timestamp wsu:Id="Timestamp-805a7373-335c-43b6-ba21-6596c4848dbf"> 
      <wsu:Created>2012-02-22T15:41:42Z</wsu:Created> 
      <wsu:Expires>2012-02-22T15:46:42Z</wsu:Expires> 
     </wsu:Timestamp> 
     </wsse:Security> 
    </soap:Header> 
    <soap:Body> 
     <SendTransmission xmlns="http://edd.ca.gov/"> 
     <SendTransmissionRequest xmlns="http://www.irs.gov/a2a/mef/MeFTransmitterServiceWse.xsd"> 
      <TransmissionDataList> 
       <Count>1</Count> 
       <TransmissionData> 
        <TransmissionId>123456789</TransmissionId> 
        <ElectronicPostmark>2012-02-22T07:41:42.2502206-08:00</ElectronicPostmark> 
       </TransmissionData> 
      </TransmissionDataList> 
     </SendTransmissionRequest> 
     <fileBytes> 
      <xop:Include href="cid:[email protected]"/> 
     </fileBytes> 
     </SendTransmission> 
    </soap:Body> 
</soap:Envelope> 

Respuesta

2

Puede haber algo más, pero por el momento, yo soy sospechoso de la wsse: UsernameToken. Descargué el documento al http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf y lo leí anoche. Está escrito en un lenguaje bastante sencillo y siento que entiendo lo que dice, pero me deja una pregunta más pequeña que la que formulé originalmente. Este documento propone que puede utilizar una contraseña de texto sin formato en este formato:

<S11:Envelope xmlns:S11="..." xmlns:wsse="..."> 
    <S11:Header> 
    ... 
    <wsse:Security> 
     <wsse:UsernameToken> 
     <wsse:Username>Zoe</wsse:Username> 
     <wsse:Password>IloveDogs</wsse:Password> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    ... 
    </S11:Header> 
... 
</S11:Envelope> 

O puede utilizar un resumen de contraseña. Define digerir una contraseña así:

Password_Digest = Base 64 (SHA-1 (nonce + creada + contraseña))

Según la referencia, el formato de una contraseña compendio sería el siguiente :

<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "..."> 
    <S11:Header> 
    ... 
    <wsse:Security> 
    <wsse:UsernameToken> 
     <wsse:Username>NNK</wsse:Username> 
     <wsse:Password Type="...#PasswordDigest"> 
     weYI3nXd8LjMNVksCKFV8t3rgHh3Rw== 
     </wsse:Password> 
     <wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce> 
     <wsu:Created>2003-07-16T01:24:32Z</wsu:Created> 
    </wsse:UsernameToken> 
    </wsse:Security> 
    ... 
    </S11:Header> 
... 
</S11:Envelope> 

Este no es el formato utilizado en el ejemplo proporcionado por el editor del servicio web. La versión de texto sin formato en la referencia no usa un nonce. El mensaje de ejemplo usa un nonce pero requiere una contraseña de texto sin formato. Me parece que el uso de un nonce sin un resumen de contraseña no agrega seguridad al mensaje. Podría ser cualquier cadena aleatoria de caracteres si no hay acuerdo sobre cómo se creará. ¿Me estoy perdiendo el punto?

Sé que esto debe parecer una empresa tediosa, pero espero que al proporcionar esto aquí, tal vez podamos proporcionar un poco de ayuda a la siguiente persona que se presente.

0

Yo también he encontrado este problema. El editor del servicio web (edd.ca.gov) respondió afirmando que el "valor es requerido por los estándares SOAP 1.2", pero no encuentro un soporte válido para eso. Parece que ambos estamos yendo por el mismo camino (FSET) y tal vez deberíamos unirnos y trabajar juntos, dos cabezas son mejor que una. He encontrado muchos errores dentro del código de ejemplo y yo todavía tengo que hacerlo funcionar.

+1

Parece que las personas que están disponibles en EDD no van a ser de mucha ayuda. Dejé este proyecto de lado por un tiempo para poder concentrarme en otras cosas. Tendré que regresar, pero aún no he reservado tiempo. Estaría más que dispuesto a combinar esfuerzos. No veo que SO tenga una función de mensaje privado, pero si realmente quiere colaborar, vuelva a comentar y descubriremos una forma de comunicarse fuera de línea. – jrodenhi

+0

Podría publicar mi correo electrónico si eso no "rompe las reglas" –

+0

En realidad, mi dirección de correo electrónico está en mi perfil. Creo que el único problema con la publicación de su dirección de correo electrónico es que puede provocar que reciba un montón de correo no deseado.No creo que no publicar su dirección de correo electrónico lleve a no obtener un montón de spam, pero ¿quién soy yo? – jrodenhi

Cuestiones relacionadas