Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/01/2012, 02:34
serpino
 
Fecha de Ingreso: enero-2012
Mensajes: 7
Antigüedad: 12 años, 11 meses
Puntos: 0
Error 406 al llamar a un Web Service

Buenos dias, soy nuevo en el foro y suelo consultarlo bastante.

Mi problema es que estoy empezando a programar web service en vb.net.

Mi objetivo es realizar la llamada al web service y enviarle una cadena string, pero me devuelve el error 406 no aceptable.

No se si es por la cadena que le paso en el paramHeader o por la llamada o por el contentLenght....estoy un poco perdido y necesito ayuda.

os dejo la funcion que utilizo...:


Public Function EnviarACK(ByVal cadenaACK As String, ByVal urlACK As String, ByVal USERNAME As String, _
ByVal PSSWD As String, _
Optional ByVal Domain As String = "") As HttpWebResponse

'************************************************* ***************
'Generar datos del POST en el stream tmpStream
'************************************************* ***************
'Generar límite
Dim limite As String = "----------" & DateTime.Now.Ticks.ToString("x")

'Generar contenido del post
Dim paramHeader As String
Dim paramHeaderBytes As Byte()
Dim tmpStream As Stream = New MemoryStream()
Dim buffer As Byte() = {}
Dim bytesRead As Integer = 0

'Escribir la cabecera del parametro en el tmpStream
paramHeader = cadenaACK.ToString()
paramHeaderBytes = Encoding.UTF8.GetBytes(paramHeader)
tmpStream.Write(paramHeaderBytes, 0, paramHeaderBytes.Length)

'Crear el string de límite final como matriz de bytes
Dim limiteBytes As Byte() = Encoding.UTF8.GetBytes(vbNewLine & "--" + limite + vbNewLine)

'Escriba el límite final
tmpStream.Write(limiteBytes, 0, limiteBytes.Length)

'************************************************* *******************
'Enviar el request
'************************************************* *******************
'Cuando utiliza protocolo HTTPS necesita una función de validación de certificado
ServicePointManager.ServerCertificateValidationCal lback = New RemoteCertificateValidationCallback(AddressOf ValidarCertificado)

'Crear el objeto HttpWebRequest con la url de la pagina destino
Dim HttpWRequest As HttpWebRequest = HttpWebRequest.Create(urlACK)
'Si se le pasaron credenciales las asigna, sino utilizar las credenciales actuales
If (USERNAME <> "") Then
Dim creds As New Net.NetworkCredential(USERNAME, PSSWD, Domain)
HttpWRequest.Credentials = creds
Else
HttpWRequest.Credentials = CredentialCache.DefaultCredentials
End If

'Habilitar el buffer, no se envían los datos hasta la sentencia GetResponse()
HttpWRequest.AllowWriteStreamBuffering = True

HttpWRequest.Method = "POST"


'Asignar el contentType con el limite
HttpWRequest.ContentType = "application/x-www-form-urlencoded" & limite
tmpStream.Seek(0, SeekOrigin.Begin)

'Convertir
Dim data As String
Data = ReadAll(tmpStream)

'asignar el largo del stream
HttpWRequest.ContentLength = tmpStream.Length
Dim stream As Stream = HttpWRequest.GetRequestStream()

ReDim buffer(tmpStream.Length - 1)
bytesRead = tmpStream.Read(buffer, 0, buffer.Length)
While bytesRead <> 0
stream.Write(buffer, 0, bytesRead)
bytesRead = tmpStream.Read(buffer, 0, buffer.Length)
End While

Dim Response As HttpWebResponse = Nothing
Try
Response = HttpWRequest.GetResponse()
Catch ex As Exception
Debug.Print(ex.Message)
End Try
Return Response
End Function



PD: Tengo otra duda....al generar la cadena que quiero enviar, va incluida en ella la descripcion SOAP. ¿Es eso correcto o el propio web Service genera el SOAP?

Muchas gracias por su ayuda

Última edición por serpino; 12/01/2012 a las 03:49