WebRequest.BeginGetResponse メソッド
派生クラスでオーバーライドされると、インターネット リソースの非同期要求を開始します。
Public Overridable Function BeginGetResponse( _
ByVal callback As AsyncCallback, _ ByVal state As Object _) As IAsyncResult
[C#]
public virtual IAsyncResult BeginGetResponse(AsyncCallbackcallback,objectstate);
[C++]
public: virtual IAsyncResult* BeginGetResponse(AsyncCallback* callback,Object* state);
[JScript]
public function BeginGetResponse(
callback : AsyncCallback,state : Object) : IAsyncResult;
パラメータ
- callback
AsyncCallback デリゲート。 - state
非同期要求の状態情報を格納するオブジェクト。
戻り値
非同期の要求を参照する IAsyncResult 。
例外
例外の種類 | 条件 |
---|---|
NotSupportedException | メソッドが派生クラスでオーバーライドされていないのに、そのメソッドへのアクセスが試行されました。 |
解説
BeginGetResponse メソッドは、応答の非同期要求を開始します。 AsyncCallback デリゲートを実装するコールバック メソッドは、 EndGetResponse メソッドを使用してインターネット リソースから WebResponse を返します。
メモ WebRequest クラスは、抽象 (Visual Basic では MustInherit) クラスです。実行時の WebRequest インスタンスの実際の動作は、 WebRequest.Create メソッドで返される派生クラスによって決まります。既定値および例外の詳細については、 HttpWebRequest や FileWebRequest などの派生クラスの説明を参照してください。
使用例
[Visual Basic, C#, C++] BeginGetResponse を使用して、ターゲット リソースを非同期的に要求する例を次に示します。リソースが取得されている場合は、指定したコールバック メソッドが実行されます。
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 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 ' New
End Class ' RequestState
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("https://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 ' Main
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 ' RespCallback
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 ' ReadCallBack
End Class ' WebRequest_BeginGetResponse
[C#]
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("https://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);
}
}
}
[C++]
#using <mscorlib.dll>
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::IO;
using namespace System::Text;
using namespace System::Threading;
public __gc class RequestState {
// This class stores the state of the request.
static const int BUFFER_SIZE = 1024;
public:
StringBuilder* requestData;
Byte bufferRead[];
WebRequest* request;
WebResponse* response;
Stream* responseStream;
RequestState() {
bufferRead = new Byte[BUFFER_SIZE];
requestData = new StringBuilder(S"");
request = 0;
responseStream = 0;
}
};
__gc class WebRequest_BeginGetResponse {
public:
static ManualResetEvent* allDone = new ManualResetEvent(false);
static const 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, new AsyncCallback(0, ReadCallBack), myRequestState);
} catch (WebException* e) {
Console::WriteLine(S"WebException raised!");
Console::WriteLine(S"\n {0}", e->Message);
Console::WriteLine(S"\n {0}", __box(e->Status));
} catch (Exception* e) {
Console::WriteLine(S"Exception raised!");
Console::WriteLine(S"Source : {0}", e->Source);
Console::WriteLine(S"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,
new AsyncCallback(0, ReadCallBack), myRequestState);
} else {
Console::WriteLine(S"\nThe HTML page Contents are: ");
if (myRequestState->requestData->Length>1) {
String* sringContent;
sringContent = myRequestState->requestData->ToString();
Console::WriteLine(sringContent);
}
Console::WriteLine(S"\nPress 'Enter' key to continue........");
responseStream->Close();
allDone->Set();
}
} catch (WebException* e) {
Console::WriteLine(S"WebException raised!");
Console::WriteLine(S"\n {0}", e->Message);
Console::WriteLine(S"\n {0}", __box(e->Status));
} catch (Exception* e) {
Console::WriteLine(S"Exception raised!");
Console::WriteLine(S"Source : {0}" , e->Source);
Console::WriteLine(S"Message : {0}" , e->Message);
}
}
};
int main() {
try {
// Create a new webrequest to the mentioned URL.
WebRequest* myWebRequest= WebRequest::Create(S"https://www.contoso.com");
// Please, set the proxy to a correct value.
WebProxy* proxy = new WebProxy(S"myproxy:80");
proxy->Credentials = new NetworkCredential(S"srikun", S"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 =
dynamic_cast<IAsyncResult*> (myWebRequest->BeginGetResponse(new AsyncCallback(asyncResult, WebRequest_BeginGetResponse::RespCallback), myRequestState));
WebRequest_BeginGetResponse::allDone->WaitOne();
// Release the WebResponse resource.
myRequestState->response->Close();
Console::Read();
} catch (WebException* e) {
Console::WriteLine(S"WebException raised!");
Console::WriteLine(S"\n {0}", e->Message);
Console::WriteLine(S"\n {0}", __box(e->Status));
} catch (Exception* e) {
Console::WriteLine(S"Exception raised!");
Console::WriteLine(S"Source : {0}", e->Source);
Console::WriteLine(S"Message : {0}", e->Message);
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
参照
WebRequest クラス | WebRequest メンバ | System.Net 名前空間 | EndGetResponse | GetResponse | 非同期要求の作成