NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Startet einen asynchronen Lesevorgang, der Daten aus dem Datenstrom liest und im angegebenen Array speichert.
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
Parameter
- offset
- Int32
Der nullbasierte Speicherort, an buffer dem die Auslesedaten aus diesem Datenstrom gespeichert werden sollen.
- count
- Int32
Die maximale Anzahl von Bytes, die aus dem Datenstrom gelesen werden sollen.
- asyncCallback
- AsyncCallback
Ein AsyncCallback Delegat, der auf die Methode verweist, die aufgerufen werden soll, wenn der Lesevorgang abgeschlossen ist.
- asyncState
- Object
Ein benutzerdefiniertes Objekt, das Informationen zum Lesevorgang enthält. Dieses Objekt wird an den asyncCallback Delegaten übergeben, wenn der Vorgang abgeschlossen ist.
Gibt zurück
Ein IAsyncResult Objekt, das den Status des asynchronen Vorgangs angibt.
Ausnahmen
buffer ist null.
offset ist kleiner als 0.
-oder-
offset ist größer als die Länge von buffer.
-oder-
offset Plus count ist größer als die Länge von buffer.
Fehler beim Lesevorgang.
-oder-
Verschlüsselung wird verwendet, aber die Daten konnten nicht entschlüsselt werden.
Es wird bereits ein Lesevorgang ausgeführt.
Dieses Objekt wurde geschlossen.
Die Authentifizierung ist nicht aufgetreten.
Beispiele
Im folgenden Codebeispiel wird das Starten eines asynchronen Lesevorgangs veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die NegotiateStream Klasse bereitgestellt wird.
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();
}
Hinweise
Wenn Verschlüsselung, Signatur oder Verschlüsselung und Signatur aktiviert sind, liest der Lesevorgang die Daten aus dem zugrunde liegenden Datenstrom, überprüft die Integrität der Daten und entschlüsselt sie. Wenn keine Sicherheitsdienste wie Datenverschlüsselung oder Anmeldung verwendet werden, startet diese Methode einen asynchronen Lesevorgang für den zugrunde liegenden Datenstrom.
Diese Methode ist asynchron und blockiert nicht, während der Vorgang abgeschlossen ist. Um zu blockieren, bis der Vorgang abgeschlossen ist, verwenden Sie die Read Methode.
Der asynchrone Lesevorgang muss durch Aufrufen der EndRead Methode abgeschlossen werden. In der asyncCallback Regel wird die Methode vom Delegaten aufgerufen. Ausführliche Informationen zur Verwendung des asynchronen Programmiermodells finden Sie unter asynchrones Aufrufen synchroner Methoden
Die NegotiateStream Klasse unterstützt nicht mehrere gleichzeitige Lesevorgänge. Wenn Sie versuchen, einen Lesevorgang zu starten, während ein anderer Lesevorgang bereits im gleichen Datenstrom ausgeführt wird, wird eine NotSupportedException Ausnahme ausgelöst.
Sie können diese Methode erst aufrufen, nachdem Sie sich erfolgreich authentifiziert haben. Rufen Sie zum Authentifizieren eine der AuthenticateAsClientMethoden , , AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServer, oder AuthenticateAsServerAsyncBeginAuthenticateAsServer Methoden auf.