Отправка запроса POST: System.Net.WebException - PullRequest
1 голос
/ 09 марта 2009

Я не первый раз использую этот метод для отправки запроса POST, и у меня никогда не возникало проблем:

    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();
    }

По запросу. GetRequestStream () Я получаю System.Net.WebException: базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.
Еще интереснее то, что он отлично работает на некоторых компьютерах, но не работает на моей машине (Windows 7 Beta) и на производственном сервере (Windows Server 2008). Дополнительная информация:

Работает - Windows Xp - .NET 2.0
Работает - Windows Xp - .NET 3.5
Работает - Windows Server 2003 - .NET 3.0
Не работает - Windows Vista - .NET 3.5
Не работает - Windows Server 2008 - .NET 3.5
Не работает - Windows 7 Beta - .NET 3.5 SP1

Попробовал:

  • Куча вещей из здесь , ничего не помогло.
  • Использование WebClient , ничего не изменилось.
  • Настроил эти опции , но не заметил заметной разницы.
  • Пробовал WireShark . Очень хороший инструмент.

[решаемая. Любопытное]
Я забыл упомянуть, но Ури был https ... Я попробовал http, и это сработало. Не могу поверить, я не пробовал раньше ...
Тем не менее, я был бы признателен, если бы кто-то пролил свет на всю эту ситуацию.

Ответы [ 3 ]

1 голос
/ 09 марта 2009

Работает ли GET? Возможно, это проблема конфигурации прокси (proxycfg и т. Д.).

Также - чтобы упростить вещи (уменьшить количество неизвестных), рассмотрите возможность использования WebClient для создания сообщения:

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);
}
1 голос
/ 09 марта 2009

Моим первым планом атаки было бы использовать WireShark , чтобы увидеть, что происходит на уровне сети в каждом случае. Посмотрите, что отправляет каждая машина.

Кроме того, вы заметили различия между операционными системами, но все ли они имеют одинаковую версию .NET (вплоть до SP)?

0 голосов
/ 09 марта 2009

Попробуйте настроить один или несколько из следующих параметров:

  • SendChucked
  • AllowAutoRedirect
  • TransferEncoding

Также попробуйте отметить различия между ними с вашими различными конфигурациями.

...