NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Inicia uma operação de leitura assíncrona que lê dados do fluxo e os armazena no array especificado.
public:
override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, object? asyncState);
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult
Parâmetros
- offset
- Int32
A localização baseada em zero onde buffer começar a armazenar os dados lidos deste fluxo.
- count
- Int32
O número máximo de bytes a ler do fluxo.
- asyncCallback
- AsyncCallback
Um AsyncCallback delegado que faz referência ao método a invocar quando a operação de leitura estiver completa.
- asyncState
- Object
Um objeto definido pelo utilizador que contém informação sobre a operação de leitura. Este objeto é passado para o asyncCallback delegado quando a operação termina.
Devoluções
Um objeto que IAsyncResult indica o estado da operação assíncrona.
Exceções
buffer é null.
offset é inferior a 0.
-ou-
offset é maior do que o comprimento de buffer.
-ou-
offset mais count é maior do que o comprimento de buffer.
A operação de leitura falhou.
-ou-
A encriptação está em uso, mas os dados não puderam ser desencriptados.
Já está em curso uma operação de leitura.
Este objeto foi encerrado.
A autenticação não ocorreu.
Exemplos
O exemplo de código seguinte demonstra o início de uma operação de leitura assíncrona. Este exemplo de código faz parte de um exemplo maior fornecido para a NegotiateStream classe.
public static void AuthenticateClient(TcpClient clientRequest)
{
NetworkStream stream = clientRequest.GetStream();
// Create the NegotiateStream.
NegotiateStream authStream = new NegotiateStream(stream, false);
// Save the current client and NegotiateStream instance
// in a ClientState object.
ClientState cState = new ClientState(authStream, clientRequest);
// Listen for the client authentication request.
Task authTask = authStream
.AuthenticateAsServerAsync()
.ContinueWith(task => { EndAuthenticateCallback(cState); });
// Any exceptions that occurred during authentication are
// thrown by the EndAuthenticateAsServer method.
try
{
// This call blocks until the authentication is complete.
authTask.Wait();
}
catch (AuthenticationException e)
{
Console.WriteLine(e);
Console.WriteLine("Authentication failed - closing connection.");
return;
}
catch (Exception e)
{
Console.WriteLine(e);
Console.WriteLine("Closing connection.");
return;
}
Task<int> readTask = authStream
.ReadAsync(cState.Buffer, 0, cState.Buffer.Length);
readTask
.ContinueWith((task) => { EndReadCallback(cState, task.Result); })
.Wait();
// Finished with the current client.
authStream.Close();
clientRequest.Close();
}
Observações
Se a encriptação, assinatura ou encriptação e assinatura estiverem ativadas, a operação de leitura lê os dados do fluxo subjacente, verifica a integridade dos dados e desencripta-os. Se não estiverem em uso serviços de segurança como encriptação ou assinatura de dados, este método inicia uma operação de leitura assíncrona no fluxo subjacente.
Este método é assíncrono e não bloqueia enquanto a operação está concluída. Para bloquear até a operação terminar, use o Read método.
A operação de leitura assíncrona deve ser completada chamando o EndRead método. Normalmente, o método é invocado pelo asyncCallback delegado. Para informações detalhadas sobre a utilização do modelo de programação assíncrona, veja Chamar Métodos Síncronos Assíncronos
A NegotiateStream classe não suporta múltiplas operações de leitura simultâneas. Se tentar iniciar uma operação de leitura enquanto outra já está a ser executada no mesmo fluxo, será lançada uma NotSupportedException exceção.
Não pode chamar este método até ter autenticado com sucesso. Para autenticar, chame um dos AuthenticateAsClient, AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServer, AuthenticateAsServerAsync, ou BeginAuthenticateAsServer métodos.