Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
BeginGetResponse Method

HttpWebRequest.BeginGetResponse Method

Begins an asynchronous request to an Internet resource.

Namespace:  System.Net
Assemblies:   System.Net.Requests (in System.Net.Requests.dll)
  System (in System.dll)

'Declaration
Public Overrides Function BeginGetResponse ( _
	callback As AsyncCallback, _
	state As Object _
) As IAsyncResult

Parameters

callback
Type: System.AsyncCallback

The AsyncCallback delegate

state
Type: System.Object

The state object for this request.

Return Value

Type: System.IAsyncResult
An IAsyncResult that references the asynchronous request for a response.

ExceptionCondition
InvalidOperationException

The stream is already in use by a previous call to BeginGetResponse

-or-

TransferEncoding is set to a value and SendChunked is false.

-or-

The thread pool is running out of threads.

ProtocolViolationException

Method is GET or HEAD, and either ContentLength is greater than zero or SendChunked is true.

-or-

KeepAlive is true, AllowWriteStreamBuffering is false, and either ContentLength is -1, SendChunked is false and Method is POST or PUT.

-or-

The HttpWebRequest has an entity body but the BeginGetResponse method is called without calling the BeginGetRequestStream method.

-or-

The ContentLength is greater than zero, but the application does not write all of the promised data.

WebException

Abort was previously called.

The BeginGetResponse method starts an asynchronous request for a response from the Internet resource. The asynchronous callback method uses the EndGetResponse method to return the actual WebResponse.

A ProtocolViolationException is thrown in several cases when the properties set on the HttpWebRequest class are conflicting. This exception occurs if an application sets the ContentLength property and the SendChunked property to true, and then sends an HTTP GET request. This exception occurs if an application tries to send chunked to a server that only supports HTTP 1.0 protocol, where this is not supported. This exception occurs if an application tries to send data without setting the ContentLength property or the SendChunked is false when buffering is disabled and on a keepalive connection (the KeepAlive property is true).

If a WebException is thrown, use the Response and Status properties of the exception to determine the response from the server.

The BeginGetResponse method requires some synchronous setup tasks to complete (DNS resolution, proxy detection, and TCP socket connection, for example) before this method becomes asynchronous. As a result, this method should never be called on a user interface (UI) thread because it might take considerable time (up to several minutes depending on network settings) to complete the initial synchronous setup tasks before an exception for an error is thrown or the method succeeds.

To learn more about the thread pool, see The Managed Thread Pool.

NoteNote

Your application cannot mix synchronous and asynchronous methods for a particular request. If you call the BeginGetRequestStream method, you must use the BeginGetResponse method to retrieve the response.

NoteNote

This member outputs trace information when you enable network tracing in your application. For more information, see Network Tracing in the .NET Framework.

The following code example uses the BeginGetResponse method to make an asynchronous request for an Internet resource.

NoteNote

In the case of asynchronous requests, it is the responsibility of the client application to implement its own time-out mechanism. The following code example shows how to do it.


Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class RequestState
   ' This class stores the State of the request. 
   Private BUFFER_SIZE As Integer = 1024
   Public requestData As StringBuilder
   Public BufferRead() As Byte 
   Public request As HttpWebRequest
   Public response As HttpWebResponse
   Public streamResponse As Stream

   Public Sub New()
      BufferRead = New Byte(BUFFER_SIZE) {}
      requestData = New StringBuilder("")
      request = Nothing
      streamResponse = Nothing 
   End Sub 'New 
End Class 'RequestState


Class HttpWebRequest_BeginGetResponse

   Public Shared allDone As New ManualResetEvent(False)
   Private BUFFER_SIZE As Integer = 1024
   Private DefaultTimeout As Integer = 2 * 60 * 1000

    ' 2 minutes timeout 
   ' Abort the request if the timer fires. 
   Private Shared Sub TimeoutCallback(state As Object, timedOut As Boolean)
      If timedOut Then 
         Dim request As HttpWebRequest = state 

         If Not (request Is Nothing) Then
            request.Abort()
         End If 
      End If 
   End Sub 'TimeoutCallback


   Shared Sub Main()

      Try 
         ' Create a HttpWebrequest object to the desired URL.  
            Dim myHttpWebRequest As HttpWebRequest = WebRequest.Create("http://www.contoso.com")

         ' Create an instance of the RequestState and assign the previous myHttpWebRequest 
         ' object to its request field.   

         Dim myRequestState As New RequestState()
         myRequestState.request = myHttpWebRequest

         Dim myResponse As New HttpWebRequest_BeginGetResponse()

         ' Start the asynchronous request. 
         Dim result As IAsyncResult = CType(myHttpWebRequest.BeginGetResponse(New AsyncCallback(AddressOf RespCallback), myRequestState), IAsyncResult)

            ' this line implements the timeout, if there is a timeout, the callback fires and the request aborts.
         ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, New WaitOrTimerCallback(AddressOf TimeoutCallback), myHttpWebRequest, myResponse.DefaultTimeout, True)

         ' The response came in the allowed time. The work processing will happen in the  
         ' callback function.
         allDone.WaitOne()

         ' Release the HttpWebResponse resource.
         myRequestState.response.Close()
      Catch e As WebException
         Console.WriteLine(ControlChars.Lf + "Main Exception raised!")
         Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
         Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
         Console.WriteLine("Press any key to continue..........")
      Catch e As Exception
         Console.WriteLine(ControlChars.Lf + "Main Exception raised!")
         Console.WriteLine("Source :{0} ", e.Source)
         Console.WriteLine("Message :{0} ", e.Message)
         Console.WriteLine("Press any key to continue..........")
         Console.Read()
      End Try 
   End Sub 'Main

   Private Shared Sub RespCallback(asynchronousResult As IAsyncResult)
      Try 
         ' State of request is asynchronous. 
         Dim myRequestState As RequestState = CType(asynchronousResult.AsyncState, RequestState)
         Dim myHttpWebRequest As HttpWebRequest = myRequestState.request
         myRequestState.response = CType(myHttpWebRequest.EndGetResponse(asynchronousResult), HttpWebResponse)

         ' Read the response into a Stream object. 
         Dim responseStream As Stream = myRequestState.response.GetResponseStream()
         myRequestState.streamResponse = responseStream

         ' Begin the Reading of the contents of the HTML page and print it to the console. 
         Dim asynchronousInputRead As IAsyncResult = responseStream.BeginRead(myRequestState.BufferRead, 0, 1024, New AsyncCallback(AddressOf ReadCallBack), myRequestState)
         Return 
      Catch e As WebException
         Console.WriteLine(ControlChars.Lf + "RespCallback Exception raised!")
         Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
         Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
      End Try
      allDone.Set()
   End Sub 'RespCallback

   Private Shared Sub ReadCallBack(asyncResult As IAsyncResult)
      Try 

         Dim myRequestState As RequestState = CType(asyncResult.AsyncState, RequestState)
         Dim responseStream As Stream = myRequestState.streamResponse
         Dim read As Integer = responseStream.EndRead(asyncResult)
         ' Read the HTML page and then print it to the console. 
         If read > 0 Then
            myRequestState.requestData.Append(Encoding.ASCII.GetString(myRequestState.BufferRead, 0, read))
            Dim asynchronousResult As IAsyncResult = responseStream.BeginRead(myRequestState.BufferRead, 0, 1024, New AsyncCallback(AddressOf ReadCallBack), myRequestState)
            Return 
         Else
            Console.WriteLine(ControlChars.Lf + "The contents of the Html page are : ")
            If myRequestState.requestData.Length > 1 Then 
               Dim stringContent As String
               stringContent = myRequestState.requestData.ToString()
               Console.WriteLine(stringContent)
            End If
            Console.WriteLine("Press any key to continue..........")
            Console.ReadLine()

            responseStream.Close()
         End If 

      Catch e As WebException
         Console.WriteLine(ControlChars.Lf + "ReadCallBack Exception raised!")
         Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
         Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
      End Try
      allDone.Set()
   End Sub 'ReadCallBack 
End Class 'HttpWebRequest_BeginGetResponse

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Portable Class Library

Supported in: Portable Class Library
Show:
© 2015 Microsoft