Отправить HTTP-запрос на сервер, не ожидая ответа - PullRequest
4 голосов
/ 11 июля 2011

Мне нужно отправить HTTP-запрос POST на сервер, но он не должен ожидать ответа. Какой метод я должен использовать для этого?

Я использовал

 WebRequest request2 = WebRequest.Create("http://local.ape-project.org:6969");
 request2.Method = "POST";
 String sendcmd = "[{\"cmd\":\"SEND\",\"chl\":3,\"params\":{\"msg\":\"Helloworld!\",\"pipe\":\"" + sub1 + "\"},\"sessid\":\"" + sub + "\"}]";
 byte[] byteArray2 = Encoding.UTF8.GetBytes(sendcmd);
 Stream dataStream2 = request2.GetRequestStream();
 dataStream2.Write(byteArray2, 0, byteArray2.Length);
 dataStream2.Close();
 WebResponse response2 = request2.GetResponse();

отправить запрос и получить ответ. Это прекрасно работает, если запрос получит ответ от сервера. Но для моих нужд мне просто нужно отправить запрос POST. И не будет никакого ответа, связанного с запросом, который я посылаю. Как мне это сделать?

Если я использую команду request2.GetRespnse (), я получаю сообщение об ошибке «Соединение было неожиданно закрыто»

Любая помощь будет оценена. спасибо

Ответы [ 6 ]

7 голосов
/ 11 июля 2011

Если вы используете протокол HTTP, то в ответе есть .

Однако, это не должно быть очень большим ответом:

HTTP/1.1 200 OK
Date: insert date here
Content-Length: 0
\r\n
3 голосов
/ 11 июля 2011

см. этот ответ.

Я думаю, вы ищете образец огня и забвения.

2 голосов
/ 11 июля 2011

HTTP требует ответа, как уже упоминал Майк Карон. Но в качестве быстрого (грязного) исправления вы могли уловить ошибку «неожиданно закрыто соединение» и продолжить.

1 голос
/ 11 июля 2011

Если с вашим сервером все в порядке, вы всегда можете использовать RAW-сокет для отправки запроса, а затем закрыть его.

0 голосов
/ 18 октября 2013

Взгляните на это, оно может помочь.

public static void SetRequest(string mXml)
{
    HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.CreateHttp("http://dork.com/service");
    webRequest.Method = "POST";
    webRequest.Headers["SOURCE"] = "WinApp";

    // Decide your encoding here

    //webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.ContentType = "text/xml; charset=utf-8";

    // You should setContentLength
    byte[] content = System.Text.Encoding.UTF8.GetBytes(mXml);
    webRequest.ContentLength = content.Length;

    var reqStream = await webRequest.GetRequestStreamAsync();
    reqStream.Write(content, 0, content.Length);

    var res = await httpRequest(webRequest);

}

0 голосов
/ 11 июля 2011

Если вы не хотите ждать ответа, вы можете отправить данные в другом потоке или просто использовать WebClient.UploadStringAsync , но учтите, что ответ всегда происходит после запроса.Использование другого потока для запроса позволяет игнорировать обработку ответа.

...