繁体   English   中英

如何发出 HTTP 请求,然后在 C# 中等待响应

[英]How do I make an HTTP request and then wait for a response in C#

我正在尝试与响应 SOAP 请求的服务交谈。 我有呼叫和响应功能。 我面临的问题是我想发出一个请求,该请求可能需要一些时间才能响应请求的数据。 在准备响应时,服务将 output 以下 SOAP 消息:“ProgressInfo Percent 0 /Percent /ProgressInfo”

ProgressInfo 消息将重复,直到最终发送实际数据。

我希望通过 HttpWebRequest 发送消息,然后坐在连接上,处理 ProgressInfo 消息,直到真正的消息通过。

这是我到目前为止所拥有的:

    public string Send_SOAP_Request_And_Recieve_Response( string iInterface, string iRequestMessage )
    {
        bool  receivedFinalMessage = false;
        string oResponseText = "";
        HttpWebRequest request = Create_Message( MESSAGE_TYPE_POST, iInterface );
        try
        {
            byte[] bytes;
            bytes = System.Text.Encoding.ASCII.GetBytes( iRequestMessage );
            request.ContentLength = bytes.Length;

            using (Stream requestStream = request.GetRequestStream() )
            {
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Close();
            }
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if ( response.StatusCode == HttpStatusCode.OK )
            {
                while (!receivedFinalMessage)
                {
                    using (Stream responseStream = response.GetResponseStream() )
                    {
                        using (StreamReader reader = new StreamReader(responseStream))
                        {
                            oResponseText = reader.ReadToEnd();
                            int locationOfProgress = oResponseText.IndexOf( "ProgressInfo" );
                            if ( oResponseText.IndexOf( "ProgressInfo" ) == -1 && oResponseText.Length > 0 )
                            {
                                receivedFinalMessage = true;
                            }
                            else
                            {
                                // ?????
                                response = (HttpWebResponse)request.GetResponse();
                            }    
                        }
                    }
                }
            }
        }

我在第二次通过时收到的错误消息是“stream 不可读”。

任何帮助将不胜感激。

如果您尝试多次读取流的内容(包括在调试器中),您通常会遇到此错误。 使用以下代码简化您的请求,然后查看字符串响应:

string soapResult;
using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
{
    using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
    {
        soapResult = rd.ReadToEnd();
    }
    Console.Write(soapResult);        
}

不要将 rd 放入您的观察列表中,而是查看 soapResult 的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM