Bagikan melalui


HttpWebRequest.EndGetResponse(IAsyncResult) Metode

Definisi

Mengakhiri permintaan asinkron ke sumber daya Internet.

public:
 override System::Net::WebResponse ^ EndGetResponse(IAsyncResult ^ asyncResult);
public override System.Net.WebResponse EndGetResponse (IAsyncResult asyncResult);
override this.EndGetResponse : IAsyncResult -> System.Net.WebResponse
Public Overrides Function EndGetResponse (asyncResult As IAsyncResult) As WebResponse

Parameter

asyncResult
IAsyncResult

Permintaan tertunda untuk respons.

Mengembalikan

WebResponse yang berisi respons dari sumber daya Internet.

Pengecualian

asyncResult null.

Metode ini dipanggil sebelumnya menggunakan asyncResult.

-atau-

Properti ContentLength lebih besar dari 0 tetapi data belum ditulis ke aliran permintaan.

Abort() sebelumnya dipanggil.

-atau-

Terjadi kesalahan saat memproses permintaan.

asyncResult tidak dikembalikan oleh instans saat ini dari panggilan ke BeginGetResponse(AsyncCallback, Object).

Contoh

Contoh kode berikut menggunakan metode EndGetResponse untuk mengakhiri permintaan asinkron untuk sumber daya Internet.

   static void RespCallback( IAsyncResult^ asynchronousResult )
   {
      try
      {
         
         // State of request is asynchronous.
         RequestState^ myRequestState = dynamic_cast<RequestState^>(asynchronousResult->AsyncState);
         HttpWebRequest^ myHttpWebRequest2 = myRequestState->request;
         myRequestState->response = dynamic_cast<HttpWebResponse^>(myHttpWebRequest2->EndGetResponse( asynchronousResult ));
         
         // Read the response into a Stream object.
         Stream^ responseStream = myRequestState->response->GetResponseStream();
         myRequestState->streamResponse = responseStream;
         
         // Begin the Reading of the contents of the HTML page and print it to the console.
         IAsyncResult^ asynchronousInputRead = responseStream->BeginRead( myRequestState->BufferRead, 0, BUFFER_SIZE, gcnew AsyncCallback( ReadCallBack ), myRequestState );
      }
      catch ( WebException^ e ) 
      {
         Console::WriteLine( "\nException raised!" );
         Console::WriteLine( "\nMessage: {0}", e->Message );
         Console::WriteLine( "\nStatus: {0}", e->Status );
      }

   }

   static void ReadCallBack( IAsyncResult^ asyncResult )
   {
      try
      {
         RequestState^ myRequestState = dynamic_cast<RequestState^>(asyncResult->AsyncState);
         Stream^ responseStream = myRequestState->streamResponse;
         int read = responseStream->EndRead( asyncResult );
         
         // Read the HTML page and then print it to the console.
         if ( read > 0 )
         {
            myRequestState->requestData->Append( Encoding::ASCII->GetString( myRequestState->BufferRead, 0, read ) );
            IAsyncResult^ asynchronousResult = responseStream->BeginRead( myRequestState->BufferRead, 0, BUFFER_SIZE, gcnew AsyncCallback( ReadCallBack ), myRequestState );
         }
         else
         {
            Console::WriteLine( "\nThe contents of the Html page are : " );
            if ( myRequestState->requestData->Length > 1 )
            {
               String^ stringContent;
               stringContent = myRequestState->requestData->ToString();
               Console::WriteLine( stringContent );
            }
            Console::WriteLine( "Press any key to continue.........." );
            Console::ReadLine();
            responseStream->Close();
            allDone->Set();
         }
      }
      catch ( WebException^ e ) 
      {
         Console::WriteLine( "\nException raised!" );
         Console::WriteLine( "\nMessage: {0}", e->Message );
         Console::WriteLine( "\nStatus: {0}", e->Status );
      }

   }

};

int main()
{
   try
   {
      
      // Create a HttpWebrequest object to the desired URL.
      HttpWebRequest^ myHttpWebRequest1 = dynamic_cast<HttpWebRequest^>(WebRequest::Create( "http://www.contoso.com" ));
      
      // Create an instance of the RequestState and assign the previous myHttpWebRequest1
      // object to its request field.
      RequestState^ myRequestState = gcnew RequestState;
      myRequestState->request = myHttpWebRequest1;
      
      // Start the asynchronous request.
      IAsyncResult^ result = dynamic_cast<IAsyncResult^>(myHttpWebRequest1->BeginGetResponse( gcnew AsyncCallback( HttpWebRequest_BeginGetResponse::RespCallback ), myRequestState ));
      HttpWebRequest_BeginGetResponse::allDone->WaitOne();
      
      // Release the HttpWebResponse resource.
      myRequestState->response->Close();
   }
   catch ( WebException^ e ) 
   {
      Console::WriteLine( "\nException raised!" );
      Console::WriteLine( "\nMessage: {0}", e->Message );
      Console::WriteLine( "\nStatus: {0}", e->Status );
      Console::WriteLine( "Press any key to continue.........." );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "\nException raised!" );
      Console::WriteLine( "Source : {0} ", e->Source );
      Console::WriteLine( "Message : {0} ", e->Message );
      Console::WriteLine( "Press any key to continue.........." );
      Console::Read();
   }

}
  try
  {

    // Create a HttpWebrequest object to the desired URL.
    HttpWebRequest myHttpWebRequest1= (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

    // Create an instance of the RequestState and assign the previous myHttpWebRequest1
    // object to it's request field.
    RequestState myRequestState = new RequestState();
    myRequestState.request = myHttpWebRequest1;

    // Start the asynchronous request.
    IAsyncResult result=
      (IAsyncResult) myHttpWebRequest1.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);

    allDone.WaitOne();

    // Release the HttpWebResponse resource.
    myRequestState.response.Close();
  }
  catch(WebException e)
  {
    Console.WriteLine("\nException raised!");
    Console.WriteLine("\nMessage:{0}",e.Message);
    Console.WriteLine("\nStatus:{0}",e.Status);
    Console.WriteLine("Press any key to continue..........");
  }
  catch(Exception e)
  {
    Console.WriteLine("\nException raised!");
    Console.WriteLine("Source :{0} " , e.Source);
    Console.WriteLine("Message :{0} " , e.Message);
    Console.WriteLine("Press any key to continue..........");
    Console.Read();
  }
}
private static void RespCallback(IAsyncResult asynchronousResult)
{
  try
  {
    // State of request is asynchronous.
    RequestState myRequestState=(RequestState) asynchronousResult.AsyncState;
    HttpWebRequest  myHttpWebRequest2=myRequestState.request;
    myRequestState.response = (HttpWebResponse) myHttpWebRequest2.EndGetResponse(asynchronousResult);

    // Read the response into a Stream object.
    Stream responseStream = myRequestState.response.GetResponseStream();
    myRequestState.streamResponse=responseStream;

    // Begin the Reading of the contents of the HTML page and print it to the console.
    IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
  }
  catch(WebException e)
  {
    Console.WriteLine("\nException raised!");
    Console.WriteLine("\nMessage:{0}",e.Message);
    Console.WriteLine("\nStatus:{0}",e.Status);
  }
}
private static  void ReadCallBack(IAsyncResult asyncResult)
{
  try
  {

  RequestState myRequestState = (RequestState)asyncResult.AsyncState;
  Stream responseStream = myRequestState.streamResponse;
  int read = responseStream.EndRead( asyncResult );
  // Read the HTML page and then print it to the console.
  if (read > 0)
  {
    myRequestState.requestData.Append(Encoding.ASCII.GetString(myRequestState.BufferRead, 0, read));
    IAsyncResult asynchronousResult = responseStream.BeginRead( myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
  }
  else
  {
    Console.WriteLine("\nThe contents of the Html page are : ");
    if(myRequestState.requestData.Length>1)
    {
      string stringContent;
      stringContent = myRequestState.requestData.ToString();
      Console.WriteLine(stringContent);
    }
    Console.WriteLine("Press any key to continue..........");
    Console.ReadLine();

    responseStream.Close();
    allDone.Set();
  }
  }
  catch(WebException e)
  {
    Console.WriteLine("\nException raised!");
    Console.WriteLine("\nMessage:{0}",e.Message);
    Console.WriteLine("\nStatus:{0}",e.Status);
  }
}
  Try
    ' Create a new HttpWebrequest object to the desired URL.
    Dim myHttpWebRequest1 As HttpWebRequest = CType(WebRequest.Create("http://www.contoso.com"), HttpWebRequest)
    
    ' Create an instance of the RequestState and assign the previous myHttpWebRequest1
    ' object to it's request field.  
    Dim myRequestState As New RequestState()
    myRequestState.request = myHttpWebRequest1
    
    ' Start the Asynchronous request.
    Dim result As IAsyncResult = CType(myHttpWebRequest1.BeginGetResponse(AddressOf RespCallback, myRequestState), IAsyncResult)
    allDone.WaitOne()
  
    ' Release the HttpWebResponse resource.
    myRequestState.response.Close()
  Catch e As WebException
    Console.WriteLine(ControlChars.Cr + "Exception raised!")
    Console.WriteLine(ControlChars.Cr + "Message:{0}", e.Message)
    Console.WriteLine(ControlChars.Cr + "Status:{0}", e.Status)
    Console.WriteLine("Press any key to continue..........")
  
  Catch e As Exception
    Console.WriteLine(ControlChars.Cr + "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

Private Shared Sub RespCallback(asynchronousResult As IAsyncResult)
  Try
    ' State of request is asynchronous.
    Dim myRequestState As RequestState = CType(asynchronousResult.AsyncState, RequestState)
    Dim myHttpWebRequest2 As HttpWebRequest = myRequestState.request
    myRequestState.response = CType(myHttpWebRequest2.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, BUFFER_SIZE, AddressOf ReadCallBack, myRequestState)
  Catch e As WebException
    Console.WriteLine(ControlChars.Cr + "Exception raised!")
    Console.WriteLine(ControlChars.Cr + "Message:{0}", e.Message)
    Console.WriteLine(ControlChars.Cr + "Status:{0}", e.Status)
  End Try 
End Sub

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, BUFFER_SIZE, AddressOf ReadCallBack, myRequestState)
    Else
      Console.WriteLine(ControlChars.Cr + "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()
      allDone.Set()
    End If
  Catch e As WebException
    Console.WriteLine(ControlChars.Cr + "Exception raised!")
    Console.WriteLine(ControlChars.Cr + "Message:{0}", e.Message)
    Console.WriteLine(ControlChars.Cr + "Status:{0}", e.Status)
  End Try 
End Sub

Keterangan

Hati

WebRequest, HttpWebRequest, ServicePoint, dan WebClient usang, dan Anda tidak boleh menggunakannya untuk pengembangan baru. Gunakan HttpClient sebagai gantinya.

Metode EndGetResponse menyelesaikan permintaan asinkron untuk sumber daya Internet yang dimulai dengan memanggil metode BeginGetResponse.

Hati

Anda harus memanggil metode Close untuk menutup aliran dan merilis koneksi. Kegagalan untuk melakukannya dapat menyebabkan aplikasi Anda kehabisan koneksi.

Nota

Anggota ini mengeluarkan informasi pelacakan saat Anda mengaktifkan pelacakan jaringan di aplikasi Anda. Untuk informasi selengkapnya, lihat Pelacakan Jaringan di .NET Framework.

Berlaku untuk