HttpWebRequest等待第二个异步响应

时间:2019-08-26 13:50:41

标签: c# httpwebrequest iasyncresult

所以我需要从一个请求中获得两个响应。 我需要打电话给de webservice的文档,要求我将收到快速的同步响应,此后,它将向我发送缓慢的第二次异步响应。

在我看来,这很奇怪,我无法让.NET等待/收听/轮询第二个响应。

我得到的是以下内容;

public void testCall(object sender, EventArgs e)
{
    byte[] xmlIn = Encoding.UTF8.GetBytes("my xml");

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my url");
    request.Method = "POST";
    request.ContentType = "application/xml";

    using (var dataStream = request.GetRequestStream())
    {
        dataStream.Write(xmlIn, 0, xmlIn.Length);
    }

    request.BeginGetResponse(new AsyncCallback(FinishWebRequest), request);
}

private void FinishWebRequest(IAsyncResult result)
{       
    HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;

    using (var stream = response.GetResponseStream())
    {
        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
        var responseString = reader.ReadToEnd();

        Debug.Write(responseString);
        Response.Write(responseString);
    }
}

现在这适用于第一个响应。.但是我如何获得第二个响应?

1 个答案:

答案 0 :(得分:0)

您应该知道,我不认为http是为此用例设计的。也许您可以考虑使用System.Net.Sockets。但是值得尝试使用StreamReader而不处理它(摆脱您的using语句),并在需要时通过打破无限循环并调用StreamReader.Close()手动关闭它。

如果您走无限循环路线,请考虑超时阈值并使用s单独的线程。