Pregunta

Esta no es la primera vez que uso este método para enviar una solicitud POST, y nunca tuve ningún problema:

    public static Stream SendPostRequest(Uri uri, byte[] postData)
    {
        var request = WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postData.Length;
        Stream requestStream = request.GetRequestStream();
        requestStream.Write(postData, 0, postData.Length);
        requestStream.Close();
        return request.GetResponse().GetResponseStream();
    }

A petición.GetRequestStream () Recibo una excepción System.Net.WebException: la conexión subyacente se cerró: se produjo un error inesperado en un envío.
Aún más interesante, funciona perfectamente bien en algunas máquinas, pero no funciona en mi máquina (Windows 7 Beta) y en el servidor de producción (Windows Server 2008). Más información:

Funciona - Windows XP - .NET 2.0
Funciona - Windows Xp - .NET 3.5
Works - Windows Server 2003 - .NET 3.0
No funciona - Windows Vista - .NET 3.5
No funciona - Windows Server 2008 - .NET 3.5
No funciona - Windows 7 Beta - .NET 3.5 SP1

Intentado:

  • Un montón de cosas de aquí , nada ayudó.
  • Utilizando WebClient , nada cambió.
  • Ajustando estas opciones , pero no lo hice No note ninguna diferencia notable.
  • Probé WireShark . Una muy buena herramienta.

[Resuelto. Kinda]
Olvidé mencionar, pero Uri era https ... Probé http y funcionó. No puedo creer, no lo intenté antes ...
Aun así, agradecería que alguien aclarara esta situación.

¿Fue útil?

Solución

Mi primer plan de ataque sería usar WireShark para ver qué sucede a nivel de red en cada caso. Vea lo que está enviando cada máquina.

Además, ha notado diferencias entre los sistemas operativos, ¿pero todos tienen la misma versión de .NET (hasta SP) instalada?

Otros consejos

¿Funcionan los GET? Quizás sea un problema de configuración de proxy ( proxycfg , etc.).

También: para simplificar las cosas (reducir el número de incógnitas), considera usar WebClient para hacer la publicación:

using (WebClient client = new WebClient())
{
    client.Headers.Add("content-type","application/x-www-form-urlencoded");
    client.UploadData(address, data);
    // or more simply
    client.UploadValues(address, nameValuePairs);
}

Intente ajustar una o más de las siguientes opciones:

  • SendChucked
  • AllowAutoRedirect
  • TransferEncoding

También intente notar las diferencias entre ellas con sus diversas configuraciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top