Search code examples
windows-phone-7httpwebresponsegetresponsestream

How to cancel reading from a Stream obtained using HttpWebResponse.GetResponseStream()?


I use HttpWebResponse.BeginGetResponse() method to make a request to my server. In the "Request Complete" notification I do the following (no error handling code included):

HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result);
BinaryReader streamReader = new BinaryReader(response.GetResponseStream());

while ((readSize = streamReader.Read(buffer, 0, buffer.Length)) > 0)
{
...
}

My question is if it is OK to store the Stream obtained from response.GetResponseStream() somewhere as a member variable and make the Cancel of the request like this:

m_requestState.httpRequest.Abort();
m_requestState.httpRequestStream.Close(); // If this is missing then
// streamReader.Read() locks for a long time when connection is lost.

This code causes the streamReader.Read() to throw System.ObjectDisposedException.

Thank you!
Mihai


Solution

  • After I did some research, my conclusion is that the only solution to unlock streamReader.Read() is to include in the canceling method also the call tom_requestState.httpRequestStream.Close() (as stated in the initial question). This will make the call streamReader.Read() to throw ObjectDisposedException exception and the "Request Complete" notification to finish execution.