Udostępnij za pośrednictwem


FtpWebRequest.BeginGetResponse(AsyncCallback, Object) Metoda

Definicja

Rozpoczyna wysyłanie żądania i odbieranie odpowiedzi z serwera FTP asynchronicznie.

public:
 override IAsyncResult ^ BeginGetResponse(AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginGetResponse (AsyncCallback? callback, object? state);
public override IAsyncResult BeginGetResponse (AsyncCallback callback, object state);
override this.BeginGetResponse : AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginGetResponse (callback As AsyncCallback, state As Object) As IAsyncResult

Parametry

callback
AsyncCallback

Delegat AsyncCallback , który odwołuje się do metody wywoływania po zakończeniu operacji.

state
Object

Obiekt zdefiniowany przez użytkownika, który zawiera informacje o operacji. Ten obiekt jest przekazywany do delegata po zakończeniu callback operacji.

Zwraca

Wystąpienie IAsyncResult wskazujące stan operacji.

Wyjątki

GetResponse() lub BeginGetResponse(AsyncCallback, Object) został już wywołany dla tego wystąpienia.

Przykłady

Poniższy przykład kodu przedstawia zakończenie operacji asynchronicznej w celu pobrania strumienia żądania, a następnie uruchomienie żądania w celu uzyskania odpowiedzi. Ten przykład kodu jest częścią większego przykładu udostępnionego FtpWebRequest do omówienia klasy.

private:
   static void EndGetStreamCallback( IAsyncResult^ ar )
   {
      FtpState^ state = dynamic_cast<FtpState^>(ar->AsyncState);
      Stream^ requestStream = nullptr;

      // End the asynchronous call to get the request stream.
      try
      {
         requestStream = state->Request->EndGetRequestStream( ar );

         // Copy the file contents to the request stream.
         const int bufferLength = 2048;
         array<Byte>^buffer = gcnew array<Byte>(bufferLength);
         int count = 0;
         int readBytes = 0;
         FileStream^ stream = File::OpenRead( state->FileName );
         do
         {
            readBytes = stream->Read( buffer, 0, bufferLength );
            requestStream->Write( buffer, 0, bufferLength );
            count += readBytes;
         }
         while ( readBytes != 0 );
         Console::WriteLine( "Writing {0} bytes to the stream.", count );

         // IMPORTANT: Close the request stream before sending the request.
         requestStream->Close();

         // Asynchronously get the response to the upload request.
         state->Request->BeginGetResponse( gcnew AsyncCallback( EndGetResponseCallback ), state );
      }
      // Return exceptions to the main application thread.
      catch ( Exception^ e ) 
      {
         Console::WriteLine( "Could not get the request stream." );
         state->OperationException = e;
         state->OperationComplete->Set();
         return;
      }
   }
private static void EndGetStreamCallback(IAsyncResult ar)
{
    FtpState state = (FtpState) ar.AsyncState;

    Stream requestStream = null;
    // End the asynchronous call to get the request stream.
    try
    {
        requestStream = state.Request.EndGetRequestStream(ar);
        // Copy the file contents to the request stream.
        const int bufferLength = 2048;
        byte[] buffer = new byte[bufferLength];
        int count = 0;
        int readBytes = 0;
        FileStream stream = File.OpenRead(state.FileName);
        do
        {
            readBytes = stream.Read(buffer, 0, bufferLength);
            requestStream.Write(buffer, 0, readBytes);
            count += readBytes;
        }
        while (readBytes != 0);
        Console.WriteLine ("Writing {0} bytes to the stream.", count);
        // IMPORTANT: Close the request stream before sending the request.
        requestStream.Close();
        // Asynchronously get the response to the upload request.
        state.Request.BeginGetResponse(
            new AsyncCallback (EndGetResponseCallback),
            state
        );
    }
    // Return exceptions to the main application thread.
    catch (Exception e)
    {
        Console.WriteLine("Could not get the request stream.");
        state.OperationException = e;
        state.OperationComplete.Set();
        return;
    }
}

Uwagi

Należy wykonać operację asynchroniczną, wywołując metodę EndGetResponse . EndGetResponse Zazwyczaj jest wywoływana przez metodę przywołyną przez callbackmetodę . Aby określić stan operacji, sprawdź właściwości obiektu IAsyncResult zwróconego przez metodę BeginGetResponse .

Proxy Jeśli właściwość jest ustawiona, bezpośrednio lub w pliku konfiguracji, komunikacja z serwerem FTP odbywa się za pośrednictwem określonego serwera proxy.

BeginGetResponse program nie blokuje podczas oczekiwania na odpowiedź z serwera. Aby zablokować, wywołaj metodę GetResponse zamiast BeginGetResponse.

Aby uzyskać więcej informacji na temat używania modelu programowania asynchronicznego, zobacz Asynchroniczne wywoływanie metod synchronicznych.

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w programie .NET Framework.

Uwaga

WebException Jeśli element zostanie zgłoszony, użyj Response właściwości i Status wyjątku, aby określić odpowiedź z serwera.

Uwagi dotyczące wywoływania

Ta metoda generuje ruch sieciowy.

Dotyczy

Zobacz też