共用方式為


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) 來執行驗證。

驗證成功時,您必須檢查 IsEncryptedIsSigned 屬性,以判斷 NegotiateStream 將使用哪些安全性服務,以協助在傳輸期間保護您的數據。 請檢查 IsMutuallyAuthenticated 屬性,以判斷是否發生相互驗證。 您可以使用 RemoteIdentity 屬性來取得遠端用戶端或伺服器的相關信息。

如果驗證失敗,您會收到 AuthenticationExceptionInvalidCredentialException。 在此情況下,您可以使用不同的認證重試驗證。

您可以使用同步 Write 或異步 BeginWriteWriteAsync 方法來傳送數據。 您可以使用同步 Read 或異步 ReadAsyncBeginRead 方法來接收數據。 如果啟用加密或簽署等安全性服務,NegotiateStream會自動將這些服務套用至您的數據。

NegotiateStream 會使用您在建立 NegotiateStream時提供的數據流傳輸數據。 當您提供此基礎數據流時,可以選擇指定是否關閉 NegotiateStream 也會關閉基礎數據流。

建構函式

NegotiateStream(Stream)

使用指定的 Stream,初始化 NegotiateStream 類別的新實例。

NegotiateStream(Stream, Boolean)

使用指定的 Stream 和數據流關閉行為,初始化 NegotiateStream 類別的新實例。

屬性

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)

建立物件,其中包含產生用來與遠端物件通訊之 Proxy 所需的所有相關信息。

(繼承來源 MarshalByRefObject)
CreateWaitHandle()
已淘汰.
已淘汰.
已淘汰.

配置 WaitHandle 物件。

(繼承來源 Stream)
Dispose()

釋放 Stream所使用的所有資源。

(繼承來源 Stream)
Dispose(Boolean)

釋放 NegotiateStream 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

Dispose(Boolean)

釋放 AuthenticatedStream 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

(繼承來源 AuthenticatedStream)
DisposeAsync()

以異步方式釋放 NegotiateStream所使用的 Unmanaged 和 Managed 資源。

DisposeAsync()

以異步方式釋放 AuthenticatedStream所使用的 Unmanaged 和 Managed 資源。

(繼承來源 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)

設定如何執行從異步可處置專案傳回的工作等候。

適用於

另請參閱

  • 3.5 SP1 版中 HTTPWebRequest 的 NTLM 驗證變更