NegotiateStream.BeginWrite Yöntem

Tanım

Belirtilen arabellekten akışa s yazan Bytezaman uyumsuz bir yazma işlemi başlatır.

public:
 override IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, object? asyncState);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginWrite : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginWrite (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult

Parametreler

buffer
Byte[]

Byte Akışa yazılacak baytları sağlayan bir dizi.

offset
Int32

Akışa yazılacak baytları okumaya başlanacak sıfır tabanlı konum buffer .

count
Int32

Int32'den bufferokunacak bayt sayısını belirten bir değer.

asyncCallback
AsyncCallback

AsyncCallback Yazma işlemi tamamlandığında çağırma yöntemine başvuran bir temsilci.

asyncState
Object

Yazma işlemi hakkında bilgi içeren kullanıcı tanımlı bir nesne. İşlem tamamlandığında bu nesne temsilciye asyncCallback geçirilir.

Döndürülenler

IAsyncResult Zaman uyumsuz işlemin durumunu gösteren bir nesne.

Özel durumlar

buffer, null değeridir.

offset is less than 0.

-veya-

offset uzunluğundan bufferbüyük.

-veya-

offset artı sayı, uzunluğundan bufferbüyüktür.

Yazma işlemi başarısız oldu.

-veya-

Şifreleme kullanılıyor, ancak veriler şifrelenemiyor.

Devam eden bir yazma işlemi zaten var.

Bu nesne kapatıldı.

Kimlik doğrulaması gerçekleşmedi.

Örnekler

Aşağıdaki örnekte, zaman uyumsuz yazma işleminin başlatılası gösterilmektedir.

// Request authentication.
NetworkStream^ clientStream = client->GetStream();
NegotiateStream^ authStream = gcnew NegotiateStream( clientStream,false );

// Pass the NegotiateStream as the AsyncState object 
// so that it is available to the callback delegate.
IAsyncResult^ ar = authStream->BeginAuthenticateAsClient( gcnew AsyncCallback( EndAuthenticateCallback ), authStream );

Console::WriteLine( L"Client waiting for authentication..." );

// Wait until the result is available.
ar->AsyncWaitHandle->WaitOne();

// Display the properties of the authenticated stream.
AuthenticatedStreamReporter::DisplayProperties( authStream );

// Send a message to the server.
// Encode the test data into a byte array.
array<Byte>^message = Encoding::UTF8->GetBytes( L"Hello from the client." );
ar = authStream->BeginWrite( message, 0, message->Length, gcnew AsyncCallback( EndWriteCallback ), authStream );

// Request authentication.
NetworkStream clientStream = client.GetStream();
NegotiateStream authStream = new NegotiateStream(clientStream, false);
// Pass the NegotiateStream as the AsyncState object
// so that it is available to the callback delegate.
Task authenticateTask = authStream
    .AuthenticateAsClientAsync()
    .ContinueWith(task =>
    {
        Console.WriteLine("Client ending authentication...");
        Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel);
    });

Console.WriteLine("Client waiting for authentication...");
// Wait until the result is available.
authenticateTask.Wait();
// Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream);
// Send a message to the server.
// Encode the test data into a byte array.
byte[] message = Encoding.UTF8.GetBytes("Hello from the client.");
Task writeTask = authStream
    .WriteAsync(message, 0, message.Length)
    .ContinueWith(task =>
    {
        Console.WriteLine("Client ending write operation...");
    });

' Request authentication.
Dim clientStream = client.GetStream()
Dim authStream As New NegotiateStream(clientStream, False)

' Pass the NegotiateStream as the AsyncState object 
' so that it is available to the callback delegate.
Dim ar = authStream.BeginAuthenticateAsClient(
    New AsyncCallback(AddressOf EndAuthenticateCallback), authStream)

Console.WriteLine("Client waiting for authentication...")

' Wait until the result is available.
ar.AsyncWaitHandle.WaitOne()

' Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream)

' Send a message to the server.
' Encode the test data into a byte array.
Dim message = Encoding.UTF8.GetBytes("Hello from the client.")
ar = authStream.BeginWrite(message, 0, message.Length, 
    New AsyncCallback(AddressOf EndWriteCallback), authStream)

İşlem tamamlandığında aşağıdaki yöntem çağrılır.

// The following method is called when the write operation completes.
static void EndWriteCallback( IAsyncResult^ ar )
{
   Console::WriteLine( L"Client ending write operation..." );
   NegotiateStream^ authStream = dynamic_cast<NegotiateStream^>(ar->AsyncState);
   
   // End the asynchronous operation.
   authStream->EndWrite( ar );
}

' The following method is called when the write operation completes.
Public Shared Sub EndWriteCallback(ar As IAsyncResult)

    Console.WriteLine("Client ending write operation...")
    Dim authStream = CType(ar.AsyncState, NegotiateStream)

    ' End the asynchronous operation.
    authStream.EndWrite(ar)

End Sub

Açıklamalar

Şifreleme, imzalama veya şifreleme ve imzalama etkinleştirildiyse, bu yöntem verileri arabellekten okur, şifreler, işaretler veya şifreler ve imzalar ve temel akışı kullanarak iletir. Veri şifreleme veya imzalama gibi hiçbir güvenlik hizmeti kullanımda değilse, bu yöntem temel alınan akışta zaman uyumsuz bir yazma işlemi başlatır.

Bu yöntem zaman uyumsuzdur ve işlem tamamlanırken engellemez. İşlem tamamlanana kadar engellemek için yöntemini kullanın Read .

Zaman uyumsuz okuma işlemi yöntemi çağrılarak EndWrite tamamlanmalıdır. Genellikle, yöntemi temsilci tarafından çağrılır asyncCallback . Zaman uyumsuz programlama modelini kullanma hakkında ayrıntılı bilgi için bkz. Zaman Uyumlu Yöntemleri Zaman Uyumsuz Olarak Çağırma

sınıfı NegotiateStream birden çok eşzamanlı yazma işlemini desteklemez. Aynı akışta başka bir yazma işlemi zaten yürütülürken bir yazma işlemi başlatmayı denerseniz, bir NotSupportedException özel durum oluşturulur.

Kimlik doğrulaması başarılı olana kadar bu yöntemi çağıramazsınız. Kimlik doğrulaması yapmak için , , AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServerAsyncAuthenticateAsServerveya BeginAuthenticateAsServer yöntemlerinden birini AuthenticateAsClientçağırın.

Şunlara uygulanır