次の方法で共有


HttpWebRequest.BeginGetResponse メソッド

インターネット リソースへの非同期要求を開始します。

Overrides Public Function BeginGetResponse( _
   ByVal callback As AsyncCallback, _   ByVal state As Object _) As IAsyncResult
[C#]
public override IAsyncResult BeginGetResponse(AsyncCallbackcallback,objectstate);
[C++]
public: IAsyncResult* BeginGetResponse(AsyncCallback* callback,Object* state);
[JScript]
public override function BeginGetResponse(
   callback : AsyncCallback,state : Object) : IAsyncResult;

パラメータ

  • callback
    AsyncCallback デリゲート。
  • state
    この要求に対して使用する状態オブジェクト。

戻り値

非同期要求の応答を参照する IAsyncResult

例外

例外の種類 条件
InvalidOperationException ストリームが、既に BeginGetResponse の前回の呼び出しで使用されています。

または

TransferEncoding に値が設定され、 SendChunkedfalse です。

または

スレッド プールのスレッドが不足しています。

ProtocolViolationException Method が GET または HEAD で、 ContentLength が 0 より大きいか、 SendChunkedtrue です。

または

KeepAlivetrue で、 AllowWriteStreamBufferingfalse です。また、 ContentLength は -1、 SendChunkedfalseMethod は POST または PUT です。

WebException Abort は既に呼び出されました。

解説

BeginGetResponse メソッドは、インターネット リソースからの応答に対する非同期要求を開始します。非同期コールバック メソッドは、 EndGetResponse メソッドを使用して実際の WebResponse を返します。

スレッド プールの詳細については、「 スレッド プーリング 」を参照してください。

使用例

[Visual Basic, C#, C++] BeginGetResponse メソッドを使用して、インターネット リソースに対する非同期要求を行う例を次に示します。

[Visual Basic, C#, C++] メモ   非同期要求の場合は、クライアント側のアプリケーションが独自のタイムアウト機能を実装する必要があります。その方法を次の例に示します。

 

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 BUFFER_SIZE As Integer = 1024
   Public requestData As StringBuilder
   Public BufferRead() As Byte
   Public request As HttpWebRequest
   Public response As HttpWebResponse
   Public streamResponse As Stream
   
   Public Sub New()
      BufferRead = New Byte(BUFFER_SIZE) {}
      requestData = New StringBuilder("")
      request = Nothing
      streamResponse = Nothing
   End Sub 'New
End Class 'RequestState


Class HttpWebRequest_BeginGetResponse

   Public Shared allDone As New ManualResetEvent(False)
   Private BUFFER_SIZE As Integer = 1024
   Private DefaultTimeout As Integer = 2 * 60 * 1000

    ' 2 minutes timeout
   ' Abort the request if the timer fires.
   Private Shared Sub TimeoutCallback(state As Object, timedOut As Boolean)
      If timedOut Then
         Dim request As HttpWebRequest = state 
        
         If Not (request Is Nothing) Then
            request.Abort()
         End If
      End If
   End Sub 'TimeoutCallback
   
   
   Shared Sub Main()
     
      Try
         ' Create a HttpWebrequest object to the desired URL. 
            Dim myHttpWebRequest As HttpWebRequest = WebRequest.Create("https://www.contoso.com")
         
         ' Create an instance of the RequestState and assign the previous myHttpWebRequest
         ' object to it's request field.  
         
         Dim myRequestState As New RequestState()
         myRequestState.request = myHttpWebRequest

         Dim myResponse As New HttpWebRequest_BeginGetResponse()
         
         ' Start the asynchronous request.
         Dim result As IAsyncResult = CType(myHttpWebRequest.BeginGetResponse(New AsyncCallback(AddressOf RespCallback), myRequestState), IAsyncResult)
         
            ' this line implements the timeout, if there is a timeout, the callback fires and the request aborts.
         ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, New WaitOrTimerCallback(AddressOf TimeoutCallback), myHttpWebRequest, myResponse.DefaultTimeout, True)
         
         ' The response came in the allowed time. The work processing will happen in the 
         ' callback function.
         allDone.WaitOne()
         
         ' Release the HttpWebResponse resource.
         myRequestState.response.Close()
      Catch e As WebException
         Console.WriteLine(ControlChars.Lf + "Main Exception raised!")
         Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
         Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
         Console.WriteLine("Press any key to continue..........")
      Catch e As Exception
         Console.WriteLine(ControlChars.Lf + "Main 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 'Main
   
   Private Shared Sub RespCallback(asynchronousResult As IAsyncResult)
      Try
         ' State of request is asynchronous.
         Dim myRequestState As RequestState = CType(asynchronousResult.AsyncState, RequestState)
         Dim myHttpWebRequest As HttpWebRequest = myRequestState.request
         myRequestState.response = CType(myHttpWebRequest.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, 1024, New AsyncCallback(AddressOf ReadCallBack), myRequestState)
         Return
      Catch e As WebException
         Console.WriteLine(ControlChars.Lf + "RespCallback Exception raised!")
         Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
         Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
      End Try
      allDone.Set()
   End Sub 'RespCallback
   
   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, 1024, New AsyncCallback(AddressOf ReadCallBack), myRequestState)
            Return
         Else
            Console.WriteLine(ControlChars.Lf + "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()
         End If
      
      Catch e As WebException
         Console.WriteLine(ControlChars.Lf + "ReadCallBack Exception raised!")
         Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
         Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
      End Try
      allDone.Set()
   End Sub 'ReadCallBack 
End Class 'HttpWebRequest_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 HttpWebRequest request;
  public HttpWebResponse response;
  public Stream streamResponse;
  public RequestState()
  {
    BufferRead = new byte[BUFFER_SIZE];
    requestData = new StringBuilder("");
    request = null;
    streamResponse = null;
  }
}

class HttpWebRequest_BeginGetResponse
{
  public static ManualResetEvent allDone= new ManualResetEvent(false);
  const int BUFFER_SIZE = 1024;
  const int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout
 
  // Abort the request if the timer fires.
  private static void TimeoutCallback(object state, bool timedOut) { 
      if (timedOut) {
          HttpWebRequest request = state as HttpWebRequest;
          if (request != null) {
              request.Abort();
          }
      }
  }

  static void Main()
  {  
   
    try
    {
      // Create a HttpWebrequest object to the desired URL. 
      HttpWebRequest myHttpWebRequest= (HttpWebRequest)WebRequest.Create("https://www.contoso.com");

    
  /**
    * If you are behind a firewall and you do not have your browser proxy setup
    * you need to use the following proxy creation code.

      // Create a proxy object.
      WebProxy myProxy = new WebProxy();

      // Associate a new Uri object to the _wProxy object, using the proxy address
      // selected by the user.
      myProxy.Address = new Uri("http://myproxy");
       
        
      // Finally, initialize the Web request object proxy property with the _wProxy
      // object.
      myHttpWebRequest.Proxy=myProxy;
    ***/

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


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

      // this line impliments the timeout, if there is a timeout, the callback fires and the request becomes aborted
      ThreadPool.RegisterWaitForSingleObject (result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true);

      // The response came in the allowed time. The work processing will happen in the 
      // callback function.
      allDone.WaitOne();
      
      // Release the HttpWebResponse resource.
      myRequestState.response.Close();
    }
    catch(WebException e)
    {
      Console.WriteLine("\nMain Exception 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("\nMain Exception 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  myHttpWebRequest=myRequestState.request;
      myRequestState.response = (HttpWebResponse) myHttpWebRequest.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);
      return;
    }
    catch(WebException e)
    {
      Console.WriteLine("\nRespCallback Exception raised!");
      Console.WriteLine("\nMessage:{0}",e.Message);
      Console.WriteLine("\nStatus:{0}",e.Status);
    }
    allDone.Set();
  }
  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);
      return;
    }
    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();
    }

    }
    catch(WebException e)
    {
      Console.WriteLine("\nReadCallBack Exception raised!");
      Console.WriteLine("\nMessage:{0}",e.Message);
      Console.WriteLine("\nStatus:{0}",e.Status);
    }
    allDone.Set();

  }

[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.
   const int BUFFER_SIZE;
public:
   StringBuilder* requestData;
   Byte BufferRead[];
   HttpWebRequest* request;
   HttpWebResponse* response;
   Stream* streamResponse;

   RequestState() : BUFFER_SIZE(1024){
      BufferRead = new Byte[BUFFER_SIZE];
      requestData = new StringBuilder(S"");
      request = 0;
      streamResponse = 0;
   }
};

__gc class HttpWebRequest_BeginGetResponse {
public:
   static ManualResetEvent* allDone = new ManualResetEvent(false);
   static const int BUFFER_SIZE = 1024;
   static const int DefaultTimeOut = 120000;   // 2 minute timeout 

   // Abort the request if the timer fires.
   static void TimeoutCallback(Object* state, bool timedOut) {
      if (timedOut) {
         HttpWebRequest* request = dynamic_cast<HttpWebRequest*>(state);
         if (request != 0) {
            request->Abort();
         }
      }
   }

   static void RespCallback(IAsyncResult* asynchronousResult) {
      try {
         // State of request is asynchronous.
         RequestState* myRequestState=dynamic_cast<RequestState*> (asynchronousResult->AsyncState);
         HttpWebRequest*  myHttpWebRequest=myRequestState->request;
         myRequestState->response = dynamic_cast<HttpWebResponse*> 
            (myHttpWebRequest->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(0, ReadCallBack),
            myRequestState);
         return;
      } catch (WebException* e) {
         Console::WriteLine(S"\nRespCallback Exception raised!");
         Console::WriteLine(S"\nMessage: {0}", e->Message);
         Console::WriteLine(S"\nStatus: {0}", __box(e->Status));
      }
      allDone->Set();
   }

   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,
               new AsyncCallback(0, ReadCallBack),
               myRequestState);
            return;
         } else {
            Console::WriteLine(S"\nThe contents of the Html page are : ");
            if (myRequestState->requestData->Length>1) {
               String* stringContent;
               stringContent = myRequestState->requestData->ToString();
               Console::WriteLine(stringContent);
            }
            Console::WriteLine(S"Press any key to continue..........");
            Console::ReadLine();

            responseStream->Close();
         }

      } catch (WebException* e) {
         Console::WriteLine(S"\nReadCallBack Exception raised!");
         Console::WriteLine(S"\nMessage: {0}", e->Message);
         Console::WriteLine(S"\nStatus: {0}", __box(e->Status));
      }
      allDone->Set();
   }
};

int main() {

   try {
      // Create a HttpWebrequest object to the desired URL.
      HttpWebRequest * myHttpWebRequest= dynamic_cast<HttpWebRequest*>
         (WebRequest::Create(S"https://www.contoso.com"));

      /**
      * If you are behind a firewall and you do not have your browser proxy setup
      * you need to use the following proxy creation code.

      // Create a proxy object.
      WebProxy* myProxy = new WebProxy();

      // Associate a new Uri object to the _wProxy object, using the proxy address
      // selected by the user.
      myProxy.Address = new Uri(S"http://myproxy");

      // Finally, initialize the Web request object proxy property with the _wProxy
      // object.
      myHttpWebRequest.Proxy=myProxy;
      ***/

      // Create an instance of the RequestState and assign the previous myHttpWebRequest
      // object to its request field.
      RequestState* myRequestState = new RequestState();
      myRequestState->request = myHttpWebRequest;

      // Start the asynchronous request.
      IAsyncResult* result= dynamic_cast<IAsyncResult*>(myHttpWebRequest->BeginGetResponse(
         new AsyncCallback(0, HttpWebRequest_BeginGetResponse::RespCallback),
         myRequestState));

      // this line impliments the timeout, if there is a timeout, the callback fires and the request becomes aborted
      ThreadPool::RegisterWaitForSingleObject (
         result->AsyncWaitHandle,
         new WaitOrTimerCallback(0, HttpWebRequest_BeginGetResponse::TimeoutCallback),
         myHttpWebRequest,
         HttpWebRequest_BeginGetResponse::DefaultTimeOut,
         true);

      // The response came in the allowed time. The work processing will happen in the
      // callback function.
      HttpWebRequest_BeginGetResponse::allDone->WaitOne();

      // Release the HttpWebResponse resource.
      myRequestState->response->Close();
   } catch (WebException* e) {
      Console::WriteLine(S"\nMain Exception raised!");
      Console::WriteLine(S"\nMessage: {0}", e->Message);
      Console::WriteLine(S"\nStatus: {0}", __box(e->Status));
      Console::WriteLine(S"Press any key to continue..........");
   } catch (Exception* e) {
      Console::WriteLine(S"\nMain Exception raised!");
      Console::WriteLine(S"Source : {0} " , e->Source);
      Console::WriteLine(S"Message : {0} " , e->Message);
      Console::WriteLine(S"Press any key to continue..........");
      Console::Read();
   }
}

[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

参照

HttpWebRequest クラス | HttpWebRequest メンバ | System.Net 名前空間