2012-05-31 31 views
5

Necesito usar un servicio web que me fue proporcionado y que usa SOAP con archivos adjuntos como medio de comunicación. También usa WS-Security 1.0 como una forma de autentificación (usuario y pase en texto plano).SOAP con archivos adjuntos en VB.NET

Trabajaré en VB.NET y mi experiencia con los servicios web es muy pequeña, llegando incluso a crear un servicio web WCF, agregando la referencia de servicio en otro proyecto creando así una clase proxy y utilizando los métodos.

He buscado en Internet y he encontrado que no hay soporte nativo para SwA en VB.NET, ¿es correcto? Un ejemplo de cómo puedo abordar la comunicación y algunas indicaciones sobre dónde puedo estar más al tanto de estos conceptos sería excelente.

Respuesta

1

En un proyecto mío reciente tuve que comunicarme en C# con un servicio web de jabón. Para tratar con eso hice mi soapenvelope completo en una cadena y lo envié al servicio web con HttpWebRequest. Con WebRespons, puede leer la respuesta del servicio web y volver a ponerla en una cadena. Esta cadena puede convertirla a XmlDocument para leer el objeto que desea.

Usted puede hacer fácilmente la soapenvelope como desee con un bucle (si es necesario), y también pone el AUTHENCATION en la cabecera de la soapenvelope (lo hizo de esta manera)

Para obtener la sintaxis soapenvelope correcta de su Web servicio ¡Puedo aconsejarle que use SOAPUI, una gran aplicación pequeña que me ayudó mucho! De esta forma, notará dónde colocar la autenticación, ..

+0

Mi problema es con los archivos adjuntos. ¿Trabajas con eso también en tu proyecto? – seth

+0

¿Qué quiere decir exactamente con archivos adjuntos, puede dar un ejemplo de esto? – Kevinc

+0

Tengo un archivo xml y necesito enviarlo junto con la solicitud de jabón. Por lo que he leído, parece que no hay soporte en .NET para esto, pero realmente no sé lo que esto significa. – seth

1

¿Por qué no simplemente coloca los datos adjuntos en una matriz de bytes y los envía?

Public Class SoapPackage 
    Public Property AttachmentName() As String 
     Get 
      Return m_AttachmentName 
     End Get 
     Set 
      m_AttachmentName = Value 
     End Set 
    End Property 
    Private m_AttachmentName As String 

    ' put your file data in here 
    Public Property AttachmentData() As Byte() 
     Get 
      Return m_AttachmentData 
     End Get 
     Set 
      m_AttachmentData = Value 
     End Set 
    End Property 
    Private m_AttachmentData As Byte() 
End Class 

Streaming el archivo en la matriz de bytes con algo en este sentido (abrir una secuencia para la unión, pasarlo a esta función):

Public Shared Function StreamToByteArray(input As Stream) As Byte() 
    Dim buffer As Byte() = New Byte(16 * 1024 - 1) {} 
    Using ms As New MemoryStream() 
     Dim read As Integer 
     While (InlineAssignHelper(read, input.Read(buffer, 0, buffer.Length))) > 0 
      ms.Write(buffer, 0, read) 
     End While 
     Return ms.ToArray() 
    End Using 
End Function 

edición:

acaba de aprender que mi función StreamToByteArray se puede reemplazar con simplemente:

Dim filePath as String = "Path\to\file" 
Dim fileBytes as Byte() = System.IO.File.ReadAllBytes(filePath) 
0

Como fa Como puedo ver desde aquí: http://www.w3.org/TR/SOAP-attachments, los archivos adjuntos deben estar en línea dentro del cuerpo del mensaje, lo que significa que debe combinar las respuestas de Kevin y Tom para construir su mensaje.

Me di cuenta de que SOAP con archivos adjuntos parece ser solo un envío y no un estándar, además es bastante anticuado.

Suponiendo que tiene que utilizar el servicio web "tal cual", intentaré obtener algunos datos adicionales o ejemplos del creador/proveedor del servicio si es posible.

Cuestiones relacionadas