HttpWebRequest.EndGetResponse(IAsyncResult) 方法

定义

结束对 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

参数

asyncResult
IAsyncResult

响应的挂起请求。

返回

包含来自 Internet 资源的响应的 WebResponse

例外

asyncResult null

以前使用 asyncResult调用此方法。

-或-

ContentLength 属性大于 0,但数据尚未写入请求流。

以前调用 Abort()

-或-

处理请求时出错。

当前实例未从调用 BeginGetResponse(AsyncCallback, Object)返回 asyncResult

示例

下面的代码示例使用 EndGetResponse 方法结束对 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

注解

谨慎

WebRequestHttpWebRequestServicePointWebClient 已过时,不应将其用于新开发。 请改用 HttpClient

EndGetResponse 方法完成通过调用 BeginGetResponse 方法启动的 Internet 资源的异步请求。

谨慎

必须调用 Close 方法才能关闭流并释放连接。 否则,可能会导致应用程序耗尽连接。

注意

在应用程序中启用网络跟踪时,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework中的 网络跟踪。

适用于