HttpWebRequest.EndGetResponse(IAsyncResult) 方法

定義

結束對網際網路資源的非同步要求。

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

參數

asyncResult
IAsyncResult

回應的暫止要求。

傳回

包含來自網際網路資源回應的 WebResponse

例外狀況

asyncResultnull

這個方法先前已使用 asyncResult 呼叫過。

-或-

ContentLength 屬性大於 0,但是未將資料寫入至要求資料流。

之前已呼叫過 Abort()

-或-

處理這個要求時發生錯誤。

呼叫 BeginGetResponse(AsyncCallback, Object) 時,目前的執行個體未傳回 asyncResult

範例

下列程式碼範例會 EndGetResponse 使用 方法來結束網際網路資源的非同步要求。

   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

備註

方法 EndGetResponse 會完成呼叫 BeginGetResponse 方法所啟動之網際網路資源的非同步要求。

警告

您必須呼叫 Close 方法來關閉資料流程並釋放連線。 無法這麼做可能會導致您的應用程式用盡連線。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱.NET Framework中的網路追蹤

適用於