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