FtpWebRequest.BeginGetResponse(AsyncCallback, Object) Метод

Определение

Начинает асинхронно отправлять запрос и получать ответ с FTP-сервера.

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

Параметры

callback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении данной операции.

state
Object

Пользовательский объект, содержащий сведения об операции. Этот объект передается делегату callback после завершения операции.

Возвращаемое значение

Экземпляр IAsyncResult, представляющий состояние операции.

Исключения

GetResponse() или BeginGetResponse(AsyncCallback, Object) уже был вызван для этого экземпляра.

Примеры

В следующем примере кода показано завершение асинхронной операции для получения потока запроса, а затем запуск запроса для получения ответа. Этот пример кода является частью более крупного примера, предоставленного FtpWebRequest для обзора класса.

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

Комментарии

Необходимо завершить асинхронную операцию, вызвав EndGetResponse метод . Как правило, вызывается методом , EndGetResponse на который ссылается callback. Чтобы определить состояние операции, проверка свойства в объектеIAsyncResult, возвращаемом методом BeginGetResponse .

Proxy Если свойство задано напрямую или в файле конфигурации, обмен данными с FTP-сервером осуществляется через указанный прокси-сервер.

BeginGetResponse не блокируется во время ожидания ответа от сервера. Чтобы заблокировать, вызовите GetResponse метод вместо BeginGetResponse.

Дополнительные сведения об использовании асинхронной модели программирования см. в разделе Асинхронный вызов синхронных методов.

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе Трассировка сети в платформа .NET Framework.

Примечание

Если возникает WebException исключение , используйте Response свойства и Status исключения, чтобы определить ответ от сервера.

Примечания для тех, кто вызывает этот метод

Этот метод создает сетевой трафик.

Применяется к

См. также раздел