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



我正在尝试与一个响应SOAP请求的服务进行对话。我的呼叫和响应功能正常工作。我面临的问题是,我想提出一个可能需要一些时间才能用请求的数据进行响应的请求。在准备响应时,服务将输出以下SOAP消息:"进度信息百分比0/百分比/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();
}    
}
}
}
}
}

我在第二次通过时得到的错误消息是";流不可读">

如有任何协助,我们将不胜感激。

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

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

不要把rd放在观察列表中,而是要查看soapResult的值。

最新更新