Partilhar via


WebRequest.EndGetRequestStream(IAsyncResult) Método

Definição

Quando substituído em uma classe descendente, retorna um Stream para gravar dados no recurso da Internet.

public:
 abstract System::IO::Stream ^ EndGetRequestStream(IAsyncResult ^ asyncResult);
public:
 virtual System::IO::Stream ^ EndGetRequestStream(IAsyncResult ^ asyncResult);
public abstract System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult);
public virtual System.IO.Stream EndGetRequestStream (IAsyncResult asyncResult);
abstract member EndGetRequestStream : IAsyncResult -> System.IO.Stream
abstract member EndGetRequestStream : IAsyncResult -> System.IO.Stream
override this.EndGetRequestStream : IAsyncResult -> System.IO.Stream
Public MustOverride Function EndGetRequestStream (asyncResult As IAsyncResult) As Stream
Public Overridable Function EndGetRequestStream (asyncResult As IAsyncResult) As Stream

Parâmetros

asyncResult
IAsyncResult

Um IAsyncResult que faz referência a uma solicitação pendente para um fluxo.

Retornos

Um Stream para gravar dados.

Exceções

Qualquer tentativa é feita para acessar o método, quando o método não é substituído em uma classe descendente.

Exemplos

O exemplo a seguir obtém e usa o fluxo de solicitação chamando o EndGetRequestStream. O método EndGetRequestStream conclui a chamada assíncrona para 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

Comentários

Cuidado

WebRequest, HttpWebRequest, ServicePointe WebClient estão obsoletos e você não deve usá-los para um novo desenvolvimento. Em vez disso, use HttpClient.

O método EndGetRequestStream conclui uma solicitação de fluxo assíncrona iniciada pelo método BeginGetRequestStream.

Nota

Para evitar problemas de tempo com a coleta de lixo, feche o fluxo de resposta chamando o método Close no fluxo retornado por GetResponseStream após chamar EndGetResponse.

Nota

A classe WebRequest é uma classe abstract. O comportamento real de WebRequest instâncias em tempo de execução é determinado pela classe descendente retornada pelo método WebRequest.Create. Para obter mais informações sobre valores e exceções padrão, consulte a documentação das classes descendentes, como HttpWebRequest e FileWebRequest.

Aplica-se a

Confira também