FtpWebRequest.Timeout Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define o número de milissegundos de espera de uma solicitação.
public:
virtual property int Timeout { int get(); void set(int value); };
public override int Timeout { get; set; }
member this.Timeout : int with get, set
Public Overrides Property Timeout As Integer
Valor da propriedade
Um Int32 valor que contém o número de milissegundos a aguardar antes que uma solicitação limite. O valor padrão é Infinite.
Exceções
O valor especificado é menor que zero e não é Infinite.
Um novo valor foi especificado para essa propriedade referente a uma solicitação já em andamento.
Exemplos
O exemplo de código a seguir define essa propriedade.
static bool UploadUniqueFileOnServer( Uri^ serverUri, String^ fileName )
{
// The URI described by serverUri should use the ftp:// scheme.
// It contains the name of the directory on the server.
// Example: ftp://contoso.com.
//
// The fileName parameter identifies the file containing the data to be uploaded.
if ( serverUri->Scheme != Uri::UriSchemeFtp )
{
return false;
}
// Get the object used to communicate with the server.
FtpWebRequest^ request = dynamic_cast<FtpWebRequest^>(WebRequest::Create( serverUri ));
request->Method = WebRequestMethods::Ftp::UploadFileWithUniqueName;
// Don't set a time limit for the operation to complete.
request->Timeout = System::Threading::Timeout::Infinite;
// 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( fileName );
Stream^ requestStream = request->GetRequestStream();
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();
FtpWebResponse^ response = dynamic_cast<FtpWebResponse^>(request->GetResponse());
Console::WriteLine( "Upload status: {0}, {1}", response->StatusCode, response->StatusDescription );
Console::WriteLine( "File name: {0}", response->ResponseUri );
response->Close();
return true;
}
public static bool UploadUniqueFileOnServer (Uri serverUri, string fileName)
{
// The URI described by serverUri should use the ftp:// scheme.
// It contains the name of the directory on the server.
// Example: ftp://contoso.com.
//
// The fileName parameter identifies the file containing the data to be uploaded.
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return false;
}
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.Method = WebRequestMethods.Ftp.UploadFileWithUniqueName;
// Set a time limit for the operation to complete.
request.Timeout = 600000;
// 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(fileName);
Stream requestStream = request.GetRequestStream();
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();
FtpWebResponse response = (FtpWebResponse) request.GetResponse();
Console.WriteLine("Upload status: {0}, {1}",response.StatusCode, response.StatusDescription);
Console.WriteLine ("File name: {0}", response.ResponseUri);
response.Close();
return true;
}
Comentários
Para especificar um valor infinito, defina a Timeout propriedade como Infinite (-1). Este é o valor padrão.
Timeout é o número de milissegundos que uma solicitação síncrona feita com o GetResponse método aguarda uma resposta e que o GetRequestStream método aguarda um fluxo. Se um recurso não responder dentro do período de tempo limite, a solicitação gerará um WebException com a Status propriedade definida como Timeout.
Alterar Timeout depois de chamar o GetRequestStreammétodo , BeginGetRequestStreamGetResponse, ou BeginGetResponse causa uma exceçãoInvalidOperationException.
Uma consulta DNS (Sistema de Nomes de Domínio) pode levar até 15 segundos para retornar ou atingir o tempo limite. Se sua solicitação contiver um nome de host que exija resolução e você definir Timeout como um valor inferior a 15 segundos, pode levar 15 segundos ou mais até que um WebException seja gerado para indicar um tempo limite em sua solicitação.