Поделиться через


NegotiateStream Класс

Определение

Предоставляет поток, использующий протокол безопасности "Согласование" для проверки подлинности клиента и при необходимости сервера в обмен данными с клиентским сервером.

public ref class NegotiateStream : System::Net::Security::AuthenticatedStream
public class NegotiateStream : System.Net.Security.AuthenticatedStream
[System.Runtime.Versioning.UnsupportedOSPlatform("tvos")]
public class NegotiateStream : System.Net.Security.AuthenticatedStream
type NegotiateStream = class
    inherit AuthenticatedStream
[<System.Runtime.Versioning.UnsupportedOSPlatform("tvos")>]
type NegotiateStream = class
    inherit AuthenticatedStream
Public Class NegotiateStream
Inherits AuthenticatedStream
Наследование
Наследование
Атрибуты

Примеры

В следующем примере показана клиентская сторона подключения к серверу клиента, использующего NegotiateStream. Клиент выполняет проверку подлинности и отправляет сообщение серверу асинхронно.

#using <System.dll>

using namespace System;
using namespace System::Net;
using namespace System::Net::Security;
using namespace System::Net::Sockets;
using namespace System::Text;

// The following class displays the properties of an authenticatedStream.
public ref class AuthenticatedStreamReporter
{
public:
   static void DisplayProperties( AuthenticatedStream^ stream )
   {
      Console::WriteLine( L"IsAuthenticated: {0}", stream->IsAuthenticated );
      Console::WriteLine( L"IsMutuallyAuthenticated: {0}", stream->IsMutuallyAuthenticated );
      Console::WriteLine( L"IsEncrypted: {0}", stream->IsEncrypted );
      Console::WriteLine( L"IsSigned: {0}", stream->IsSigned );
      Console::WriteLine( L"IsServer: {0}", stream->IsServer );
   }

};


public ref class ASynchronousAuthenticatingTcpClient
{
private:
   static TcpClient^ client = nullptr;

public:
   void Main()
   {
      
      // Establish the remote endpoint for the socket.
      // For this example, use the local machine.
      IPHostEntry^ ipHostInfo = Dns::GetHostEntry( Dns::GetHostName() );
      IPAddress^ ipAddress = ipHostInfo->AddressList[ 0 ];
      
      // Client and server use port 11000. 
      IPEndPoint^ remoteEP = gcnew IPEndPoint( ipAddress,11000 );
      
      // Create a TCP/IP socket.
      client = gcnew TcpClient;
      
      // Connect the socket to the remote endpoint.
      client->Connect( remoteEP );
      Console::WriteLine( L"Client connected to {0}.", remoteEP );
      
      // Ensure the client does not close when there is 
      // still data to be sent to the server.
      client->LingerState = (gcnew LingerOption( true,0 ));
      
      // 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 );
      
      ar->AsyncWaitHandle->WaitOne();
      Console::WriteLine( L"Sent {0} bytes.", message->Length );
      
      // Close the client connection.
      authStream->Close();
      Console::WriteLine( L"Client closed." );
   }


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


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

};

void main()
{
   ASynchronousAuthenticatingTcpClient^ aatc = gcnew ASynchronousAuthenticatingTcpClient;
   aatc->Main();
}
using System;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Text;

namespace Examples.NegotiateStreamExample
{
    public class ASynchronousAuthenticatingTcpClient
    {
        static TcpClient client = null;

        public static void Main(String[] args)
        {
            // Establish the remote endpoint for the socket.
            // For this example, use the local machine.
            IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            // Client and server use port 11000.
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
            // Create a TCP/IP socket.
            client = new TcpClient();
            // Connect the socket to the remote endpoint.
            client.Connect(remoteEP);
            Console.WriteLine("Client connected to {0}.", remoteEP.ToString());
            // Ensure the client does not close when there is
            // still data to be sent to the server.
            client.LingerState = new LingerOption(true, 0);
            // 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...");
                });

            writeTask.Wait();
            Console.WriteLine("Sent {0} bytes.", message.Length);
            // Close the client connection.
            authStream.Close();
            Console.WriteLine("Client closed.");
        }
    }

    // The following class displays the properties of an authenticatedStream.
    public class AuthenticatedStreamReporter
    {
        public static void DisplayProperties(AuthenticatedStream stream)
        {
            Console.WriteLine("IsAuthenticated: {0}", stream.IsAuthenticated);
            Console.WriteLine("IsMutuallyAuthenticated: {0}", stream.IsMutuallyAuthenticated);
            Console.WriteLine("IsEncrypted: {0}", stream.IsEncrypted);
            Console.WriteLine("IsSigned: {0}", stream.IsSigned);
            Console.WriteLine("IsServer: {0}", stream.IsServer);
        }
    }
}
Imports System.Text
Imports System.Net.Sockets
Imports System.Net.Security
Imports System.Net

Namespace Examples.NegotiateStreamExample

    Public Class ASynchronousAuthenticatingTcpClient

        Shared client As TcpClient = Nothing

        Public Shared Sub Main(args As String())
            ' Establish the remote endpoint for the socket.
            ' For this example, use the local machine.
            Dim ipHostInfo = Dns.GetHostEntry("localhost")
            Dim ipAddress = ipHostInfo.AddressList(0)

            ' Client and server use port 11000. 
            Dim remoteEP As New IPEndPoint(ipAddress, 11000)

            ' Create a TCP/IP socket.
            client = New TcpClient()

            ' Connect the socket to the remote endpoint.
            client.Connect(remoteEP)
            Console.WriteLine("Client connected to {0}.", remoteEP.ToString())

            ' Ensure the client does not close when there is 
            ' still data to be sent to the server.
            client.LingerState = (New LingerOption(True, 0))

            ' 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)
            ar.AsyncWaitHandle.WaitOne()
            Console.WriteLine("Sent {0} bytes.", message.Length)

            ' Close the client connection.
            authStream.Close()
            Console.WriteLine("Client closed.")

        End Sub

        ' The following method is called when the authentication completes.
        Public Shared Sub EndAuthenticateCallback(ar As IAsyncResult)

            Console.WriteLine("Client ending authentication...")
            Dim authStream = CType(ar.AsyncState, NegotiateStream)
            Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel)

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

        End Sub

        ' 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
    End Class

    ' The following class displays the properties of an AuthenticatedStream.
    Public Class AuthenticatedStreamReporter
        Public Shared Sub DisplayProperties(stream As AuthenticatedStream)
            Console.WriteLine("IsAuthenticated: {0}", stream.IsAuthenticated)
            Console.WriteLine("IsMutuallyAuthenticated: {0}", stream.IsMutuallyAuthenticated)
            Console.WriteLine("IsEncrypted: {0}", stream.IsEncrypted)
            Console.WriteLine("IsSigned: {0}", stream.IsSigned)
            Console.WriteLine("IsServer: {0}", stream.IsServer)
        End Sub
    End Class
End Namespace

В следующем примере кода показана сторона сервера подключения к клиентскому серверу, использующая NegotiateStream для проверки подлинности клиента и чтения сообщения, отправляемого клиентом.

#using <System.dll>

using namespace System;
using namespace System::Net;
using namespace System::Net::Security;
using namespace System::Net::Sockets;
using namespace System::Security::Authentication;
using namespace System::Security::Principal;
using namespace System::Text;
using namespace System::IO;
using namespace System::Threading;

// ClientState is the AsyncState object.
private ref class ClientState
{
private:
   AuthenticatedStream^ authStream;
   TcpClient^ client;
   array<Byte>^buffer;
   StringBuilder^ message;
   ManualResetEvent^ waiter;

internal:
   ClientState( AuthenticatedStream^ a, TcpClient^ theClient )
   {
      authStream = a;
      client = theClient;
      message = nullptr;
      buffer = gcnew array<Byte>(2048);
      waiter = gcnew ManualResetEvent( false );
   }

internal:
   property TcpClient^ Client 
   {
      TcpClient^ get()
      {
         return client;
      }
   }

   property AuthenticatedStream^ AuthStream 
   {
      AuthenticatedStream^ get()
      {
         return authStream;
      }
  }

   property array<Byte>^ Buffer 
   {
      array<Byte>^ get()
      {
         return buffer;
      }

   }

   property StringBuilder^ Message 
   {
      StringBuilder^ get()
      {
         if ( message == nullptr )
                  message = gcnew StringBuilder;

         return message;
      }

   }

   property ManualResetEvent^ Waiter 
   {
      ManualResetEvent^ get()
      {
         return waiter;
      }

   }

};

public ref class AsynchronousAuthenticatingTcpListener
{
public:
   int Main()
   {
      
      // Create an IPv4 TCP/IP socket. 
      TcpListener^ listener = gcnew TcpListener( IPAddress::Any,11000 );
      
      // Listen for incoming connections.
      listener->Start();
      while ( true )
      {
         TcpClient^ clientRequest = nullptr;
         
         // Application blocks while waiting for an incoming connection.
         // Type CNTL-C to terminate the server.
         clientRequest = listener->AcceptTcpClient();
         Console::WriteLine( L"Client connected." );
         
         // A client has connected. 
         try
         {
            AuthenticateClient( clientRequest );
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( e );
            continue;
         }

      }
   }


   static void AuthenticateClient( TcpClient^ clientRequest )
   {
      NetworkStream^ stream = clientRequest->GetStream();
      
      // Create the NegotiateStream.
      NegotiateStream^ authStream = gcnew NegotiateStream( stream,false );
      
      // Save the current client and NegotiateStream instance 
      // in a ClientState object.
      ClientState^ cState = gcnew ClientState( authStream,clientRequest );
      
      // Listen for the client authentication request.
      authStream->BeginAuthenticateAsServer( gcnew AsyncCallback( EndAuthenticateCallback ), cState );
      
      // Wait until the authentication completes.
      cState->Waiter->WaitOne();
      cState->Waiter->Reset();
      authStream->BeginRead( cState->Buffer, 0, cState->Buffer->Length, gcnew AsyncCallback( EndReadCallback ), cState );
      cState->Waiter->WaitOne();
      
      // Finished with the current client.
      authStream->Close();
      clientRequest->Close();
   }


   // The following method is invoked by the
   // BeginServerAuthenticate callback delegate.
   static void EndAuthenticateCallback( IAsyncResult^ ar )
   {
      
      // Get the saved data.
      ClientState^ cState = dynamic_cast<ClientState^>(ar->AsyncState);
      TcpClient^ clientRequest = cState->Client;
      NegotiateStream^ authStream = dynamic_cast<NegotiateStream^>(cState->AuthStream);
      Console::WriteLine( L"Ending authentication." );
      
      // Any exceptions that occurred during authentication are
      // thrown by the EndServerAuthenticate method.
      try
      {
         
         // This call blocks until the authentication is complete.
         authStream->EndAuthenticateAsServer( ar );
      }
      catch ( AuthenticationException^ e ) 
      {
         Console::WriteLine( e );
         Console::WriteLine( L"Authentication failed - closing connection." );
         cState->Waiter->Set();
         return;
      }
      catch ( Exception^ e ) 
      {
         Console::WriteLine( e );
         Console::WriteLine( L"Closing connection." );
         cState->Waiter->Set();
         return;
      }

      
      // Display properties of the authenticated client.
      IIdentity^ id = authStream->RemoteIdentity;
      Console::WriteLine( L"{0} was authenticated using {1}.", id->Name, id->AuthenticationType );
      cState->Waiter->Set();
   }


   static void EndReadCallback( IAsyncResult^ ar )
   {
      
      // Get the saved data.
      ClientState^ cState = dynamic_cast<ClientState^>(ar->AsyncState);
      TcpClient^ clientRequest = cState->Client;
      NegotiateStream^ authStream = dynamic_cast<NegotiateStream^>(cState->AuthStream);
      
      // Get the buffer that stores the message sent by the client.
      int bytes = -1;
      
      // Read the client message.
      try
      {
         bytes = authStream->EndRead( ar );
         cState->Message->Append( Encoding::UTF8->GetChars( cState->Buffer, 0, bytes ) );
         if ( bytes != 0 )
         {
            authStream->BeginRead( cState->Buffer, 0, cState->Buffer->Length, gcnew AsyncCallback( EndReadCallback ), cState );
            return;
         }
      }
      catch ( Exception^ e ) 
      {
         
         // A real application should do something
         // useful here, such as logging the failure.
         Console::WriteLine( L"Client message exception:" );
         Console::WriteLine( e );
         cState->Waiter->Set();
         return;
      }

      IIdentity^ id = authStream->RemoteIdentity;
      Console::WriteLine( L"{0} says {1}", id->Name, cState->Message );
      cState->Waiter->Set();
   }

};

void main()
{
   AsynchronousAuthenticatingTcpListener^ aatl = gcnew AsynchronousAuthenticatingTcpListener;
   aatl->Main();
}

using System;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Authentication;
using System.Security.Principal;
using System.Text;
using System.IO;
using System.Threading;

namespace Examples.NegotiateStreamExample
{
    public class AsynchronousAuthenticatingTcpListener
    {
        public static void Main()
        {
            // Create an IPv4 TCP/IP socket.
            TcpListener listener = new TcpListener(IPAddress.Any, 11000);
            // Listen for incoming connections.
            listener.Start();
            while (true)
            {
                TcpClient clientRequest;
                // Application blocks while waiting for an incoming connection.
                // Type CNTL-C to terminate the server.
                clientRequest = listener.AcceptTcpClient();
                Console.WriteLine("Client connected.");
                // A client has connected.
                try
                {
                    AuthenticateClient(clientRequest);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }

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

        private static void EndAuthenticateCallback(ClientState cState)
        {
            // Get the saved data.
            NegotiateStream authStream = (NegotiateStream)cState.AuthenticatedStream;
            Console.WriteLine("Ending authentication.");

            // Display properties of the authenticated client.
            IIdentity id = authStream.RemoteIdentity;
            Console.WriteLine("{0} was authenticated using {1}.",
                id.Name,
                id.AuthenticationType
            );
        }

        private static void EndReadCallback(ClientState cState, int bytes)
        {
            NegotiateStream authStream = (NegotiateStream)cState.AuthenticatedStream;
            // Read the client message.
            try
            {
                cState.Message.Append(Encoding.UTF8.GetChars(cState.Buffer, 0, bytes));
                if (bytes != 0)
                {
                    Task<int> readTask = authStream.ReadAsync(cState.Buffer, 0, cState.Buffer.Length);
                    readTask
                        .ContinueWith(task => { EndReadCallback(cState, task.Result); })
                        .Wait();

                    return;
                }
            }
            catch (Exception e)
            {
                // A real application should do something
                // useful here, such as logging the failure.
                Console.WriteLine("Client message exception:");
                Console.WriteLine(e);
                return;
            }
            IIdentity id = authStream.RemoteIdentity;
            Console.WriteLine("{0} says {1}", id.Name, cState.Message.ToString());
        }
    }
    // ClientState is the AsyncState object.
    internal class ClientState
    {
        private StringBuilder _message = null;

        internal ClientState(AuthenticatedStream a, TcpClient theClient)
        {
            AuthenticatedStream = a;
            Client = theClient;
        }
        internal TcpClient Client { get; }

        internal AuthenticatedStream AuthenticatedStream { get; }

        internal byte[] Buffer { get; } = new byte[2048];

        internal StringBuilder Message
        {
            get { return _message ??= new StringBuilder(); }
        }
    }
}

Комментарии

Используйте класс NegotiateStream для проверки подлинности и для защиты информации, передаваемой между клиентом и сервером. Используя NegotiateStream, можно выполнить следующие действия.

  • Отправьте учетные данные клиента на сервер для олицетворения или делегирования.

  • Запрос проверки подлинности сервера.

  • Перед передачей шифруйте и(или) подписывание данных.

Перед передачей информации необходимо выполнить проверку подлинности. Клиенты запрашивают проверку подлинности с помощью синхронных AuthenticateAsClient методов, которые блокируются до завершения проверки подлинности или асинхронных BeginAuthenticateAsClient методов, которые не блокируются при ожидании завершения проверки подлинности. Серверы запрашивают проверку подлинности с помощью синхронных AuthenticateAsServer или асинхронных методов BeginAuthenticateAsServer. Клиент и при необходимости сервер проходят проверку подлинности с помощью протокола безопасности "Согласование". Протокол Kerberos используется для проверки подлинности, если он поддерживается как клиентом, так и сервером; в противном случае используется NTLM. Класс NegotiateStream выполняет проверку подлинности с помощью интерфейса поставщика поддержки безопасности (SSPI).

При успешной проверке подлинности необходимо проверить свойства IsEncrypted и IsSigned, чтобы определить, какие службы безопасности будут использоваться NegotiateStream для защиты данных во время передачи. Проверьте свойство IsMutuallyAuthenticated, чтобы определить, произошла ли взаимная проверка подлинности. Вы можете получить сведения о удаленном клиенте или сервере с помощью свойства RemoteIdentity.

Если проверка подлинности завершается ошибкой, вы получите AuthenticationException или InvalidCredentialException. В этом случае можно повторить проверку подлинности с помощью других учетных данных.

Данные отправляются с помощью синхронных Write или асинхронных BeginWrite или методов WriteAsync. Вы получаете данные с помощью синхронных Read или асинхронных ReadAsync или методов BeginRead. Если службы безопасности, такие как шифрование или подпись, включены, они автоматически применяются к данным NegotiateStream.

NegotiateStream передает данные с помощью потока, который предоставляется при создании NegotiateStream. При предоставлении этого базового потока можно указать, закрывается ли NegotiateStream также закрывается базовый поток.

Конструкторы

NegotiateStream(Stream)

Инициализирует новый экземпляр класса NegotiateStream с помощью указанного Stream.

NegotiateStream(Stream, Boolean)

Инициализирует новый экземпляр класса NegotiateStream с помощью указанного Stream и поведения закрытия потока.

Свойства

CanRead

Возвращает значение Boolean, указывающее, доступен ли базовый поток для чтения.

CanSeek

Возвращает значение Boolean, указывающее, можно ли искать базовый поток.

CanTimeout

Возвращает значение Boolean, указывающее, поддерживает ли базовый поток время ожидания.

CanWrite

Возвращает значение Boolean, указывающее, является ли базовый поток записываемым.

ImpersonationLevel

Возвращает значение, указывающее, как сервер может использовать учетные данные клиента.

InnerStream

Получает поток, используемый этим AuthenticatedStream для отправки и получения данных.

(Унаследовано от AuthenticatedStream)
IsAuthenticated

Возвращает значение Boolean, указывающее, выполнена ли проверка подлинности успешно.

IsEncrypted

Возвращает значение Boolean, указывающее, использует ли этот NegotiateStream шифрование данных.

IsMutuallyAuthenticated

Возвращает значение Boolean, указывающее, прошел ли проверка подлинности как сервер, так и клиент.

IsServer

Возвращает значение Boolean, указывающее, была ли локальная сторона подключения, используемая этим NegotiateStream, прошла проверку подлинности в качестве сервера.

IsSigned

Возвращает значение Boolean, указывающее, подписаны ли данные, отправленные с помощью этого потока.

LeaveInnerStreamOpen

Возвращает, остается ли поток, используемый этим AuthenticatedStream для отправки и получения данных.

(Унаследовано от AuthenticatedStream)
Length

Возвращает длину базового потока.

Position

Возвращает или задает текущую позицию в базовом потоке.

ReadTimeout

Возвращает или задает время, когда блоки операций чтения ожидают данных.

RemoteIdentity

Получает сведения об удостоверении удаленной стороны, совместном доступе к этому потоку с проверкой подлинности.

WriteTimeout

Возвращает или задает время, когда блоки операций записи ожидают данных.

Методы

AuthenticateAsClient()

Вызывается клиентами для проверки подлинности клиента и при необходимости сервера в подключении к клиентскому серверу.

AuthenticateAsClient(NetworkCredential, ChannelBinding, String)

Вызывается клиентами для проверки подлинности клиента и при необходимости сервера в подключении к клиентскому серверу. Процесс проверки подлинности использует указанные учетные данные клиента и привязку канала.

AuthenticateAsClient(NetworkCredential, ChannelBinding, String, ProtectionLevel, TokenImpersonationLevel)

Вызывается клиентами для проверки подлинности клиента и при необходимости сервера в подключении к клиентскому серверу. В процессе проверки подлинности используются указанные учетные данные, параметры проверки подлинности и привязка канала.

AuthenticateAsClient(NetworkCredential, String)

Вызывается клиентами для проверки подлинности клиента и при необходимости сервера в подключении к клиентскому серверу. В процессе проверки подлинности используются указанные учетные данные клиента.

AuthenticateAsClient(NetworkCredential, String, ProtectionLevel, TokenImpersonationLevel)

Вызывается клиентами для проверки подлинности клиента и при необходимости сервера в подключении к клиентскому серверу. В процессе проверки подлинности используются указанные учетные данные и параметры проверки подлинности.

AuthenticateAsClientAsync()

Вызывается клиентами для проверки подлинности клиента и, при необходимости, сервера в подключении к клиентскому серверу в качестве асинхронной операции.

AuthenticateAsClientAsync(NetworkCredential, ChannelBinding, String)

Вызывается клиентами для проверки подлинности клиента и, при необходимости, сервера в подключении к клиентскому серверу в качестве асинхронной операции. Процесс проверки подлинности использует указанные учетные данные клиента и привязку канала.

AuthenticateAsClientAsync(NetworkCredential, ChannelBinding, String, ProtectionLevel, TokenImpersonationLevel)

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

AuthenticateAsClientAsync(NetworkCredential, String)

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

AuthenticateAsClientAsync(NetworkCredential, String, ProtectionLevel, TokenImpersonationLevel)

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

AuthenticateAsServer()

Вызывается серверами для проверки подлинности клиента и, при необходимости, сервера в подключении к клиентскому серверу.

AuthenticateAsServer(ExtendedProtectionPolicy)

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

AuthenticateAsServer(NetworkCredential, ExtendedProtectionPolicy, ProtectionLevel, TokenImpersonationLevel)

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

AuthenticateAsServer(NetworkCredential, ProtectionLevel, TokenImpersonationLevel)

Вызывается серверами для проверки подлинности клиента и, при необходимости, сервера в подключении к клиентскому серверу. В процессе проверки подлинности используются указанные учетные данные сервера и параметры проверки подлинности.

AuthenticateAsServerAsync()

Вызывается серверами для проверки подлинности клиента и, при необходимости, сервера в подключении к клиентскому серверу в качестве асинхронной операции.

AuthenticateAsServerAsync(ExtendedProtectionPolicy)

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

AuthenticateAsServerAsync(NetworkCredential, ExtendedProtectionPolicy, ProtectionLevel, TokenImpersonationLevel)

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

AuthenticateAsServerAsync(NetworkCredential, ProtectionLevel, TokenImpersonationLevel)

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

BeginAuthenticateAsClient(AsyncCallback, Object)

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

BeginAuthenticateAsClient(NetworkCredential, ChannelBinding, String, AsyncCallback, Object)

Вызывается клиентами, чтобы начать асинхронную операцию для проверки подлинности клиента и, при необходимости, сервера в подключении к клиентскому серверу. Процесс проверки подлинности использует указанные учетные данные и привязку канала. Этот метод не блокируется.

BeginAuthenticateAsClient(NetworkCredential, ChannelBinding, String, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object)

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

BeginAuthenticateAsClient(NetworkCredential, String, AsyncCallback, Object)

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

BeginAuthenticateAsClient(NetworkCredential, String, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object)

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

BeginAuthenticateAsServer(AsyncCallback, Object)

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

BeginAuthenticateAsServer(ExtendedProtectionPolicy, AsyncCallback, Object)

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

BeginAuthenticateAsServer(NetworkCredential, ExtendedProtectionPolicy, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object)

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

BeginAuthenticateAsServer(NetworkCredential, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object)

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

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает асинхронную операцию чтения, которая считывает данные из потока и сохраняет ее в указанном массиве.

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает асинхронную операцию чтения. (Вместо этого рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает асинхронную операцию записи, которая записывает Byteиз указанного буфера в поток.

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает асинхронную операцию записи. (Вместо этого рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
Close()

Закрывает текущий поток и освобождает все ресурсы (например, сокеты и дескрипторы файлов), связанные с текущим потоком. Вместо вызова этого метода убедитесь, что поток правильно удален.

(Унаследовано от Stream)
CopyTo(Stream)

Считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов.

(Унаследовано от Stream)
CopyTo(Stream, Int32)

Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream)

Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток с помощью указанного маркера отмены. Обе позиции потоков расширены по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream, Int32)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и маркер отмены. Обе позиции потоков расширены по количеству скопированных байтов.

(Унаследовано от Stream)
CreateObjRef(Type)

Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
CreateWaitHandle()
Устаревшие..
Устаревшие..
Устаревшие..

Выделяет объект WaitHandle.

(Унаследовано от Stream)
Dispose()

Освобождает все ресурсы, используемые Stream.

(Унаследовано от Stream)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые NegotiateStream, и при необходимости освобождает управляемые ресурсы.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые AuthenticatedStream, и при необходимости освобождает управляемые ресурсы.

(Унаследовано от AuthenticatedStream)
DisposeAsync()

Асинхронно освобождает неуправляемые и управляемые ресурсы, используемые NegotiateStream.

DisposeAsync()

Асинхронно освобождает неуправляемые и управляемые ресурсы, используемые AuthenticatedStream.

(Унаследовано от AuthenticatedStream)
EndAuthenticateAsClient(IAsyncResult)

Завершает ожидающую асинхронную операцию проверки подлинности клиента, которая была запущена с вызовом BeginAuthenticateAsClient.

EndAuthenticateAsServer(IAsyncResult)

Завершает ожидающую асинхронную операцию проверки подлинности клиента, которая была запущена с вызовом BeginAuthenticateAsServer.

EndRead(IAsyncResult)

Завершает асинхронную операцию чтения, которая была запущена с вызовом BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).

EndRead(IAsyncResult)

Ожидает завершения ожидающего асинхронного чтения. (Вместо этого рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
EndWrite(IAsyncResult)

Завершает асинхронную операцию записи, которая была запущена с вызовом BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object).

EndWrite(IAsyncResult)

Завершает асинхронную операцию записи. (Вместо этого рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Flush()

Вызывает запись буферных данных на базовое устройство.

FlushAsync()

Асинхронно очищает все буферы для этого потока и приводит к записи всех буферных данных на базовое устройство.

(Унаследовано от Stream)
FlushAsync(CancellationToken)

Асинхронно записывает все буферированные данные на базовое устройство.

FlushAsync(CancellationToken)

Асинхронно очищает все буферы для этого потока, приводит к записи всех буферных данных на базовое устройство и отслеживает запросы на отмену.

(Унаследовано от Stream)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Устаревшие..

Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неглубокую копию текущего объекта MarshalByRefObject.

(Унаследовано от MarshalByRefObject)
ObjectInvariant()
Устаревшие..

Предоставляет поддержку Contract.

(Унаследовано от Stream)
Read(Byte[], Int32, Int32)

Считывает данные из этого потока и сохраняет его в указанном массиве.

Read(Span<Byte>)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает положение в потоке по количеству байтов, считываемых.

(Унаследовано от Stream)
ReadAsync(Byte[], Int32, Int32)

Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию в потоке по числу байтов.

(Унаследовано от Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно считывает данные из этого потока и сохраняет его в указанном массиве.

ReadAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока, перемещает положение в потоке по количеству операций чтения байтов и отслеживает запросы на отмену.

(Унаследовано от Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает данные из NegotiateStream и сохраняет их в диапазоне памяти байтов в виде асинхронной операции.

ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока, перемещает положение в потоке по количеству операций чтения байтов и отслеживает запросы на отмену.

(Унаследовано от Stream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Считывает по крайней мере минимальное количество байтов из текущего потока и перемещает положение в потоке по количеству байтов, считываемых.

(Унаследовано от Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Асинхронно считывает по крайней мере минимальное количество байтов из текущего потока, перемещает положение в потоке по количеству операций чтения байтов и отслеживает запросы на отмену.

(Унаследовано от Stream)
ReadByte()

Считывает байт из потока и перемещает позицию в потоке по одному байту или возвращает -1, если в конце потока.

(Унаследовано от Stream)
ReadExactly(Byte[], Int32, Int32)

Считывает count число байтов из текущего потока и перемещает положение в потоке.

(Унаследовано от Stream)
ReadExactly(Span<Byte>)

Считывает байты из текущего потока и перемещает позицию в потоке до заполнения buffer.

(Унаследовано от Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно считывает count число байтов из текущего потока, перемещает положение в потоке и отслеживает запросы на отмену.

(Унаследовано от Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает байты из текущего потока, перемещает положение в потоке до заполнения buffer и отслеживает запросы на отмену.

(Унаследовано от Stream)
Seek(Int64, SeekOrigin)

Создает NotSupportedException.

SetLength(Int64)

Задает длину базового потока.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
Write(Byte[], Int32, Int32)

Запишите указанное количество Byteв базовый поток с помощью указанного буфера и смещения.

Write(ReadOnlySpan<Byte>)

При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в этом потоке по количеству записанных байтов.

(Унаследовано от Stream)
WriteAsync(Byte[], Int32, Int32)

Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию в этом потоке по количеству записанных байтов.

(Унаследовано от Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно записывает указанное число Byteв базовый поток.

WriteAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию в этом потоке по количеству записанных байтов и отслеживает запросы на отмену.

(Унаследовано от Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает указанное число Byteв базовый поток.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию в этом потоке по количеству записанных байтов и отслеживает запросы на отмену.

(Унаследовано от Stream)
WriteByte(Byte)

Записывает байт в текущую позицию в потоке и перемещает позицию в потоке по одному байту.

(Унаследовано от Stream)

Методы расширения

CopyToAsync(Stream, PipeWriter, CancellationToken)

Асинхронно считывает байты из Stream и записывает их в указанный PipeWriterс помощью маркера отмены.

ConfigureAwait(IAsyncDisposable, Boolean)

Настраивает способ ожидания задач, возвращаемых из асинхронного удаления.

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

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