WebRequest.EndGetResponse(IAsyncResult) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в классе-потомке возвращает WebResponse.
public:
abstract System::Net::WebResponse ^ EndGetResponse(IAsyncResult ^ asyncResult);
public:
virtual System::Net::WebResponse ^ EndGetResponse(IAsyncResult ^ asyncResult);
public abstract System.Net.WebResponse EndGetResponse (IAsyncResult asyncResult);
public virtual System.Net.WebResponse EndGetResponse (IAsyncResult asyncResult);
abstract member EndGetResponse : IAsyncResult -> System.Net.WebResponse
abstract member EndGetResponse : IAsyncResult -> System.Net.WebResponse
override this.EndGetResponse : IAsyncResult -> System.Net.WebResponse
Public MustOverride Function EndGetResponse (asyncResult As IAsyncResult) As WebResponse
Public Overridable Function EndGetResponse (asyncResult As IAsyncResult) As WebResponse
Параметры
- asyncResult
- IAsyncResult
IAsyncResult, ссылающийся на ожидающий запрос ответа.
Возвращаемое значение
WebResponse, содержащий ответ на запрос Интернета.
Исключения
Любая попытка получить доступ к методу, если метод не переопределяется в классе-потомке.
Примеры
В следующем примере вызывается EndGetResponse для получения целевого ресурса.
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::IO;
using namespace System::Text;
using namespace System::Threading;
public ref class RequestState
{
private:
// This class stores the state of the request.
literal int BUFFER_SIZE = 1024;
public:
StringBuilder^ requestData;
array<Byte>^bufferRead;
WebRequest^ request;
WebResponse^ response;
Stream^ responseStream;
RequestState()
{
bufferRead = gcnew array<Byte>(BUFFER_SIZE);
requestData = gcnew StringBuilder( "" );
request = nullptr;
responseStream = nullptr;
}
};
ref class WebRequest_BeginGetResponse
{
public:
static ManualResetEvent^ allDone = gcnew ManualResetEvent( false );
literal int BUFFER_SIZE = 1024;
static void RespCallback( IAsyncResult^ asynchronousResult )
{
try
{
// Set the State of request to asynchronous.
RequestState^ myRequestState = dynamic_cast<RequestState^>(asynchronousResult->AsyncState);
WebRequest^ myWebRequest1 = myRequestState->request;
// End the Asynchronous response.
myRequestState->response = myWebRequest1->EndGetResponse( asynchronousResult );
// Read the response into a 'Stream' object.
Stream^ responseStream = myRequestState->response->GetResponseStream();
myRequestState->responseStream = responseStream;
// Begin the reading of the contents of the HTML page and print it to the console.
IAsyncResult^ asynchronousResultRead = responseStream->BeginRead( myRequestState->bufferRead, 0, BUFFER_SIZE, gcnew AsyncCallback( ReadCallBack ), myRequestState );
}
catch ( WebException^ e )
{
Console::WriteLine( "WebException raised!" );
Console::WriteLine( "\n {0}", e->Message );
Console::WriteLine( "\n {0}", e->Status );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception raised!" );
Console::WriteLine( "Source : {0}", e->Source );
Console::WriteLine( "Message : {0}", e->Message );
}
}
static void ReadCallBack( IAsyncResult^ asyncResult )
{
try
{
// Result state is set to AsyncState.
RequestState^ myRequestState = dynamic_cast<RequestState^>(asyncResult->AsyncState);
Stream^ responseStream = myRequestState->responseStream;
int read = responseStream->EndRead( asyncResult );
// Read the contents of the HTML page and then print 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 HTML page Contents are: " );
if ( myRequestState->requestData->Length > 1 )
{
String^ sringContent;
sringContent = myRequestState->requestData->ToString();
Console::WriteLine( sringContent );
}
Console::WriteLine( "\nPress 'Enter' key to continue........" );
responseStream->Close();
allDone->Set();
}
}
catch ( WebException^ e )
{
Console::WriteLine( "WebException raised!" );
Console::WriteLine( "\n {0}", e->Message );
Console::WriteLine( "\n {0}", e->Status );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception raised!" );
Console::WriteLine( "Source : {0}", e->Source );
Console::WriteLine( "Message : {0}", e->Message );
}
}
};
int main()
{
try
{
// Create a new webrequest to the mentioned URL.
WebRequest^ myWebRequest = WebRequest::Create( "http://www.contoso.com" );
// Please, set the proxy to a correct value.
WebProxy^ proxy = gcnew WebProxy( "myproxy:80" );
proxy->Credentials = gcnew NetworkCredential( "srikun","simrin123" );
myWebRequest->Proxy = proxy;
// Create a new instance of the RequestState.
RequestState^ myRequestState = gcnew RequestState;
// The 'WebRequest' object is associated to the 'RequestState' object.
myRequestState->request = myWebRequest;
// Start the Asynchronous call for response.
IAsyncResult^ asyncResult = dynamic_cast<IAsyncResult^>(myWebRequest->BeginGetResponse( gcnew AsyncCallback( WebRequest_BeginGetResponse::RespCallback ), myRequestState ));
WebRequest_BeginGetResponse::allDone->WaitOne();
// Release the WebResponse resource.
myRequestState->response->Close();
Console::Read();
}
catch ( WebException^ e )
{
Console::WriteLine( "WebException raised!" );
Console::WriteLine( "\n {0}", e->Message );
Console::WriteLine( "\n {0}", e->Status );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception raised!" );
Console::WriteLine( "Source : {0}", e->Source );
Console::WriteLine( "Message : {0}", e->Message );
}
}
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;
public class RequestState
{
// This class stores the state of the request.
const int BUFFER_SIZE = 1024;
public StringBuilder requestData;
public byte[] bufferRead;
public WebRequest request;
public WebResponse response;
public Stream responseStream;
public RequestState()
{
bufferRead = new byte[BUFFER_SIZE];
requestData = new StringBuilder("");
request = null;
responseStream = null;
}
}
class WebRequest_BeginGetResponse
{
public static ManualResetEvent allDone= new ManualResetEvent(false);
const int BUFFER_SIZE = 1024;
static void Main()
{
try
{
// Create a new webrequest to the mentioned URL.
WebRequest myWebRequest= WebRequest.Create("http://www.contoso.com");
// Please, set the proxy to a correct value.
WebProxy proxy=new WebProxy("myproxy:80");
proxy.Credentials=new NetworkCredential("srikun","simrin123");
myWebRequest.Proxy=proxy;
// Create a new instance of the RequestState.
RequestState myRequestState = new RequestState();
// The 'WebRequest' object is associated to the 'RequestState' object.
myRequestState.request = myWebRequest;
// Start the Asynchronous call for response.
IAsyncResult asyncResult=(IAsyncResult) myWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);
allDone.WaitOne();
// Release the WebResponse resource.
myRequestState.response.Close();
Console.Read();
}
catch(WebException e)
{
Console.WriteLine("WebException raised!");
Console.WriteLine("\n{0}",e.Message);
Console.WriteLine("\n{0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("Exception raised!");
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
}
private static void RespCallback(IAsyncResult asynchronousResult)
{
try
{
// Set the State of request to asynchronous.
RequestState myRequestState=(RequestState) asynchronousResult.AsyncState;
WebRequest myWebRequest1=myRequestState.request;
// End the Asynchronous response.
myRequestState.response = myWebRequest1.EndGetResponse(asynchronousResult);
// Read the response into a 'Stream' object.
Stream responseStream = myRequestState.response.GetResponseStream();
myRequestState.responseStream=responseStream;
// Begin the reading of the contents of the HTML page and print it to the console.
IAsyncResult asynchronousResultRead = responseStream.BeginRead(myRequestState.bufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
}
catch(WebException e)
{
Console.WriteLine("WebException raised!");
Console.WriteLine("\n{0}",e.Message);
Console.WriteLine("\n{0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("Exception raised!");
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
}
private static void ReadCallBack(IAsyncResult asyncResult)
{
try
{
// Result state is set to AsyncState.
RequestState myRequestState = (RequestState)asyncResult.AsyncState;
Stream responseStream = myRequestState.responseStream;
int read = responseStream.EndRead( asyncResult );
// Read the contents of the HTML page and then print 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 HTML page Contents are: ");
if(myRequestState.requestData.Length>1)
{
string sringContent;
sringContent = myRequestState.requestData.ToString();
Console.WriteLine(sringContent);
}
Console.WriteLine("\nPress 'Enter' key to continue........");
responseStream.Close();
allDone.Set();
}
}
catch(WebException e)
{
Console.WriteLine("WebException raised!");
Console.WriteLine("\n{0}",e.Message);
Console.WriteLine("\n{0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("Exception raised!");
Console.WriteLine("Source : {0}" , e.Source);
Console.WriteLine("Message : {0}" , e.Message);
}
}
}
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Threading
Public Class RequestState
' This class stores the state of the request
Private Shared BUFFER_SIZE As Integer = 1024
Public requestData As StringBuilder
Public bufferRead() As Byte
Public request As WebRequest
Public response As WebResponse
Public responseStream As Stream
Public Sub New()
bufferRead = New Byte(BUFFER_SIZE) {}
requestData = New StringBuilder("")
request = Nothing
responseStream = Nothing
End Sub
End Class
Class WebRequest_BeginGetResponse
Public Shared allDone As New ManualResetEvent(False)
Private Shared BUFFER_SIZE As Integer = 1024
Shared Sub Main()
Try
' Create a new webrequest to the mentioned URL.
Dim myWebRequest As WebRequest = WebRequest.Create("http://www.contoso.com")
'Please, set the proxy to a correct value.
Dim proxy As New WebProxy("itgproxy:80")
proxy.Credentials = New NetworkCredential("srikun", "simrin123")
myWebRequest.Proxy = proxy
' Create a new instance of the RequestState.
Dim myRequestState As New RequestState()
' The 'WebRequest' object is associated to the 'RequestState' object.
myRequestState.request = myWebRequest
' Start the Asynchronous call for response.
Dim asyncResult As IAsyncResult = CType(myWebRequest.BeginGetResponse(AddressOf RespCallback, myRequestState), IAsyncResult)
allDone.WaitOne()
' Release the WebResponse resource.
myRequestState.response.Close()
Console.Read()
Catch e As WebException
Console.WriteLine("WebException raised!")
Console.WriteLine(ControlChars.Cr + "{0}", e.Message)
Console.WriteLine(ControlChars.Cr + "{0}", e.Status)
Catch e As Exception
Console.WriteLine("Exception raised!")
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
End Try
End Sub
Private Shared Sub RespCallback(asynchronousResult As IAsyncResult)
Try
' Set the State of request to asynchronous.
Dim myRequestState As RequestState = CType(asynchronousResult.AsyncState, RequestState)
Dim myWebRequest1 As WebRequest = myRequestState.request
' End the Asynchronous response.
myRequestState.response = myWebRequest1.EndGetResponse(asynchronousResult)
' Read the response into a 'Stream' object.
Dim responseStream As Stream = myRequestState.response.GetResponseStream()
myRequestState.responseStream = responseStream
' Begin the reading of the contents of the HTML page and print it to the console.
Dim asynchronousResultRead As IAsyncResult = responseStream.BeginRead(myRequestState.bufferRead, 0, BUFFER_SIZE, AddressOf ReadCallBack, myRequestState)
Catch e As WebException
Console.WriteLine("WebException raised!")
Console.WriteLine(ControlChars.Cr + "{0}", e.Message)
Console.WriteLine(ControlChars.Cr + "{0}", e.Status)
Catch e As Exception
Console.WriteLine("Exception raised!")
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
End Try
End Sub
Private Shared Sub ReadCallBack(asyncResult As IAsyncResult)
Try
' Result state is set to AsyncState.
Dim myRequestState As RequestState = CType(asyncResult.AsyncState, RequestState)
Dim responseStream As Stream = myRequestState.responseStream
Dim read As Integer = responseStream.EndRead(asyncResult)
' Read the contents of the HTML page and then print 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 HTML page Contents are: ")
If myRequestState.requestData.Length > 1 Then
Dim sringContent As String
sringContent = myRequestState.requestData.ToString()
Console.WriteLine(sringContent)
End If
Console.WriteLine(ControlChars.Cr + "Press 'Enter' key to continue........")
responseStream.Close()
allDone.Set()
End If
Catch e As WebException
Console.WriteLine("WebException raised!")
Console.WriteLine(ControlChars.Cr + "{0}", e.Message)
Console.WriteLine(ControlChars.Cr + "{0}", e.Status)
Catch e As Exception
Console.WriteLine("Exception raised!")
Console.WriteLine("Source :{0} ", e.Source)
Console.WriteLine("Message :{0} ", e.Message)
End Try
End Sub
End Class
Комментарии
Осторожность
WebRequest
, HttpWebRequest
, ServicePoint
и WebClient
устарели, и их не следует использовать для новой разработки. Вместо этого используйте HttpClient.
Метод EndGetResponse завершает асинхронный запрос для ресурса Интернета, запущенного с помощью метода BeginGetResponse.
Заметка
Класс WebRequest — это класс abstract
. Фактическое поведение экземпляров WebRequest во время выполнения определяется классом-потомком, возвращаемым методом WebRequest.Create. Дополнительные сведения о значениях и исключениях по умолчанию см. в документации по классам-потомкам, таким как HttpWebRequest и FileWebRequest.
Применяется к
См. также раздел
- BeginGetResponse(AsyncCallback, Object)
- асинхронных запросов