WebRequest.BeginGetResponse(AsyncCallback, Object) 메서드

정의

하위 클래스에서 재정의되는 경우 인터넷 리소스에 대한 비동기 요청을 시작합니다.

public abstract IAsyncResult BeginGetResponse (AsyncCallback callback, object state);
public virtual IAsyncResult BeginGetResponse (AsyncCallback? callback, object? state);
public virtual IAsyncResult BeginGetResponse (AsyncCallback callback, object state);

매개 변수

callback
AsyncCallback

AsyncCallback 대리자입니다.

state
Object

이 비동기 요청에 대한 상태 정보를 포함하는 개체입니다.

반환

비동기 요청을 참조하는 IAsyncResult.

예외

메서드가 하위 클래스에서 재정의되지 않은 경우 메서드에 액세스하려고 시도합니다.

예제

다음 예제에서는 BeginGetResponse 사용하여 대상 리소스를 비동기적으로 요청합니다. 리소스를 가져오면 지정된 콜백 메서드가 실행됩니다.

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);
    }
  }
}

설명

주의

WebRequest, HttpWebRequest, ServicePointWebClient 사용되지 않으므로 새 개발에 사용하면 안 됩니다. 대신 HttpClient 사용합니다.

BeginGetResponse 메서드는 응답에 대한 비동기 요청을 시작합니다. AsyncCallback 대리자를 구현하는 콜백 메서드는 EndGetResponse 메서드를 사용하여 인터넷 리소스에서 WebResponse 반환합니다.

참고

WebRequest 클래스는 abstract 클래스입니다. 런타임에 WebRequest 인스턴스의 실제 동작은 WebRequest.Create 메서드에서 반환된 하위 클래스에 의해 결정됩니다. 기본값 및 예외에 대한 자세한 내용은 HttpWebRequestFileWebRequest같은 하위 클래스에 대한 설명서를 참조하세요.

참고

WebException이 throw되는 경우 예외의 ResponseStatus 속성을 사용하여 서버의 응답을 확인합니다.

적용 대상

제품 버전
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

추가 정보