다음을 통해 공유


WebRequest.BeginGetRequestStream(AsyncCallback, Object) 메서드

정의

하위 클래스에서 재정의되는 경우 GetRequestStream() 메서드의 비동기 버전을 제공합니다.

public:
 abstract IAsyncResult ^ BeginGetRequestStream(AsyncCallback ^ callback, System::Object ^ state);
public:
 virtual IAsyncResult ^ BeginGetRequestStream(AsyncCallback ^ callback, System::Object ^ state);
public abstract IAsyncResult BeginGetRequestStream (AsyncCallback callback, object state);
public virtual IAsyncResult BeginGetRequestStream (AsyncCallback? callback, object? state);
public virtual IAsyncResult BeginGetRequestStream (AsyncCallback callback, object state);
abstract member BeginGetRequestStream : AsyncCallback * obj -> IAsyncResult
abstract member BeginGetRequestStream : AsyncCallback * obj -> IAsyncResult
override this.BeginGetRequestStream : AsyncCallback * obj -> IAsyncResult
Public MustOverride Function BeginGetRequestStream (callback As AsyncCallback, state As Object) As IAsyncResult
Public Overridable Function BeginGetRequestStream (callback As AsyncCallback, state As Object) As IAsyncResult

매개 변수

callback
AsyncCallback

AsyncCallback 대리자입니다.

state
Object

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

반환

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

예외

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

예제

다음 예제에서는 BeginGetRequestStream 사용하여 요청 스트림을 비동기적으로 가져옵니다.

#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
{
public:

   // This class stores the request state of the request.
   WebRequest^ request;
   RequestState()
   {
      request = nullptr;
   }

};

ref class WebRequest_BeginGetRequeststream
{
public:
   static ManualResetEvent^ allDone = gcnew ManualResetEvent( false );
   static void ReadCallback( IAsyncResult^ asynchronousResult )
   {
      RequestState^ myRequestState = dynamic_cast<RequestState^>(asynchronousResult->AsyncState);
      WebRequest^ myWebRequest = myRequestState->request;
      
      // End of the Asynchronus request.
      Stream^ streamResponse = myWebRequest->EndGetRequestStream( asynchronousResult );
      
      // Create a string that is to be posted to the uri.
      Console::WriteLine( "Please enter a string to be posted:" );
      String^ postData = Console::ReadLine();
      
      // Convert  the string into a Byte array.
      array<Byte>^byteArray = Encoding::UTF8->GetBytes( postData );
      
      // Write data to the stream.
      streamResponse->Write( byteArray, 0, postData->Length );
      streamResponse->Close();
      allDone->Set();
   }

};

int main()
{
   
   // Create a new request to the mentioned URL.
   WebRequest^ myWebRequest = WebRequest::Create( "http://www.contoso.com" );
   
   // Create an instance of the RequestState and assign 'myWebRequest' to its request field.
   RequestState^ myRequestState = gcnew RequestState;
   myRequestState->request = myWebRequest;
   myWebRequest->ContentType = "application/x-www-form-urlencoded";
   
   // Set the 'Method' prperty  to 'POST' to post data to a Uri.
   myRequestState->request->Method = "POST";
   
   // Start the Asynchronous 'BeginGetRequestStream' method call.
   IAsyncResult^ r = dynamic_cast<IAsyncResult^>(myWebRequest->BeginGetRequestStream( gcnew AsyncCallback( WebRequest_BeginGetRequeststream::ReadCallback ), myRequestState ));
   WebRequest_BeginGetRequeststream::allDone->WaitOne();
   WebResponse^ myWebResponse = myWebRequest->GetResponse();
   Console::WriteLine( "The String* entered has been posted." );
   Console::WriteLine( "Please wait for the response..." );
   Stream^ streamResponse = myWebResponse->GetResponseStream();
   StreamReader^ streamRead = gcnew StreamReader( streamResponse );
   array<Char>^readBuff = gcnew array<Char>(256);
   int count = streamRead->Read( readBuff, 0, 256 );
   Console::WriteLine( "The contents of the HTML page are " );
   while ( count > 0 )
   {
      String^ outputData = gcnew String( readBuff,0,count );
      Console::Write( outputData );
      count = streamRead->Read( readBuff, 0, 256 );
   }

   streamResponse->Close();
   streamRead->Close();
   
   // Release the HttpWebResponse Resource.
   myWebResponse->Close();
}
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;

public class RequestState
{
    // This class stores the request state of the request.
    public WebRequest request;    
    public RequestState()
    {
        request = null;
    }
}

class WebRequest_BeginGetRequeststream
{
    public static ManualResetEvent allDone= new ManualResetEvent(false);
    static void Main()
    {
            // Create a new request to the mentioned URL.
            WebRequest myWebRequest= WebRequest.Create("http://www.contoso.com");

            // Create an instance of the RequestState and assign 
            // 'myWebRequest' to it's request field.
            RequestState myRequestState = new RequestState();
            myRequestState.request = myWebRequest;
            myWebRequest.ContentType="application/x-www-form-urlencoded";

            // Set the 'Method' property to 'POST' to post data to a Uri.
            myRequestState.request.Method="POST";
            // Start the Asynchronous 'BeginGetRequestStream' method call.
            IAsyncResult r=(IAsyncResult) myWebRequest.BeginGetRequestStream(
                new AsyncCallback(ReadCallback),myRequestState);
            // Pause the current thread until the async operation completes.
            Console.WriteLine("main thread waiting...");
            allDone.WaitOne();
            // Assign the response object of 'WebRequest' to a 'WebResponse' variable.
            WebResponse myWebResponse = myWebRequest.GetResponse();
            Console.WriteLine("The string has been posted.");
            Console.WriteLine("Please wait for the response...");

            Stream streamResponse = myWebResponse.GetResponseStream();
            StreamReader streamRead = new StreamReader( streamResponse );
            Char[] readBuff = new Char[256];
            int count = streamRead.Read( readBuff, 0, 256 );
            Console.WriteLine("\nThe contents of the HTML page are ");

            while (count > 0) 
            {
                String outputData = new String(readBuff, 0, count);
                Console.Write(outputData);
                count = streamRead.Read(readBuff, 0, 256);
            }

            // Close the Stream Object.
            streamResponse.Close();
            streamRead.Close();

            // Release the HttpWebResponse Resource.
            myWebResponse.Close();
    }
    private static void ReadCallback(IAsyncResult asynchronousResult)
    {
            RequestState myRequestState =(RequestState) asynchronousResult.AsyncState;
            WebRequest myWebRequest = myRequestState.request;

            // End the Asynchronous request.
            Stream streamResponse = myWebRequest.EndGetRequestStream(asynchronousResult);

            // Create a string that is to be posted to the uri.
            Console.WriteLine("Please enter a string to be posted:");
            string postData = Console.ReadLine();
            // Convert the string into a byte array.
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);

            // Write the data to the stream.
            streamResponse.Write(byteArray,0,postData.Length);
            streamResponse.Close();
            allDone.Set();
    }
}
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Threading

Public Class RequestState
    ' This class stores the request state of the request.
    Public request As WebRequest
    
    Public Sub New()
        request = Nothing
    End Sub
End Class


Class WebRequest_BeginGetRequeststream
    Public Shared allDone As New ManualResetEvent(False)
    
    Shared Sub Main()
          ' Create a new request.
            Dim myWebRequest As WebRequest = WebRequest.Create("http://www.contoso.com/codesnippets/next.asp")
 ' Create an instance of the RequestState and assign 
            ' myWebRequest' to it's request field.
            Dim myRequestState As New RequestState()
            myRequestState.request = myWebRequest
            myWebRequest.ContentType = "application/x-www-form-urlencoded"

            ' Set the 'Method' property  to 'POST' to post data to a Uri.
            myRequestState.request.Method = "POST"
            ' Start the asynchronous 'BeginGetRequestStream' method call.
            Dim r As IAsyncResult = CType(myWebRequest.BeginGetRequestStream(AddressOf ReadCallback, myRequestState), IAsyncResult)
            ' Pause the current thread until the async operation completes.
            allDone.WaitOne()
            ' Send the Post and get the response.
            Dim myWebResponse As WebResponse = myWebRequest.GetResponse()
            Console.WriteLine(ControlChars.Cr + "The string has been posted.")
            Console.WriteLine("Please wait for the response....")
            Dim streamResponse As Stream = myWebResponse.GetResponseStream()
            Dim streamRead As New StreamReader(streamResponse)
            Dim readBuff(256) As [Char]
            Dim count As Integer = streamRead.Read(readBuff, 0, 256)
            Console.WriteLine(ControlChars.Cr + "The contents of the HTML page are ")
            While count > 0
                Dim outputData As New [String](readBuff, 0, count)
                Console.WriteLine(outputData)
                count = streamRead.Read(readBuff, 0, 256)
            End While

           ' Close the Stream Object.
            streamResponse.Close()
            streamRead.Close()
            ' Release the HttpWebResponse Resource.
             myWebResponse.Close()
    End Sub
     
    Private Shared Sub ReadCallback(asynchronousResult As IAsyncResult)
            Dim myRequestState As RequestState = CType(asynchronousResult.AsyncState, RequestState)
            Dim myWebRequest As WebRequest = myRequestState.request
            ' End the request.
            Dim streamResponse As Stream = myWebRequest.EndGetRequestStream(asynchronousResult)
            ' Create a string that is to be posted to the uri.
            Console.WriteLine(ControlChars.Cr + "Please enter a string to be posted:")
            Dim postData As String = Console.ReadLine()
            Dim encoder As New ASCIIEncoding()
            ' Convert  the string into a byte array.
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
            ' Write the data to the stream.
            streamResponse.Write(byteArray, 0, postData.Length)
            streamResponse.Close()
            ' Allow the main thread to resume.
            allDone.Set()
    End Sub
End Class

설명

주의

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

BeginGetRequestStream 메서드는 인터넷 리소스에 데이터를 보내는 데 사용되는 스트림에 대한 비동기 요청을 시작합니다. AsyncCallback 대리자를 구현하는 콜백 메서드는 EndGetRequestStream 메서드를 사용하여 요청 스트림을 반환합니다.

메모

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

적용 대상

추가 정보