Compartilhar via


AnonymousPipeServerStream Classe

Definição

Expõe um fluxo em torno de um pipe anônimo, que dá suporte a operações de leitura e gravação síncronas e assíncronas.

public ref class AnonymousPipeServerStream sealed : System::IO::Pipes::PipeStream
public sealed class AnonymousPipeServerStream : System.IO.Pipes.PipeStream
type AnonymousPipeServerStream = class
    inherit PipeStream
Public NotInheritable Class AnonymousPipeServerStream
Inherits PipeStream
Herança
AnonymousPipeServerStream
Herança
AnonymousPipeServerStream

Exemplos

O exemplo a seguir envia uma cadeia de caracteres de um processo pai para um processo filho usando pipes anônimos. Este exemplo cria um objeto AnonymousPipeServerStream em um processo pai com um valor PipeDirection de PipeDirection.Out. Ele também cria um objeto AnonymousPipeClientStream em um processo filho com um valor PipeDirection de PipeDirection.In. Em seguida, o processo pai envia uma cadeia de caracteres fornecida pelo usuário para o processo filho. A cadeia de caracteres é exibida no console.

Este exemplo é para o processo do servidor, que usa a classe AnonymousPipeServerStream. Para obter todo o exemplo de código, incluindo o código para o cliente de pipe e o servidor, consulte Como usar pipes anônimos parade comunicação interprocesso local.

//<snippet01>
#using <System.dll>
#using <System.Core.dll>

using namespace System;
using namespace System::IO;
using namespace System::IO::Pipes;
using namespace System::Diagnostics;

ref class PipeServer
{
public:
    static void Main()
    {
        Process^ pipeClient = gcnew Process();

        pipeClient->StartInfo->FileName = "pipeClient.exe";

        AnonymousPipeServerStream^ pipeServer =
            gcnew AnonymousPipeServerStream(PipeDirection::Out,
            HandleInheritability::Inheritable);

        Console::WriteLine("[SERVER] Current TransmissionMode: {0}.",
            pipeServer->TransmissionMode);

        // Pass the client process a handle to the server.
        pipeClient->StartInfo->Arguments =
            pipeServer->GetClientHandleAsString();
        pipeClient->StartInfo->UseShellExecute = false;
        pipeClient->Start();

        pipeServer->DisposeLocalCopyOfClientHandle();

        try
        {
            // Read user input and send that to the client process.
            StreamWriter^ sw = gcnew StreamWriter(pipeServer);

            sw->AutoFlush = true;
            // Send a 'sync message' and wait for client to receive it.
            sw->WriteLine("SYNC");
            pipeServer->WaitForPipeDrain();
            // Send the console input to the client process.
            Console::Write("[SERVER] Enter text: ");
            sw->WriteLine(Console::ReadLine());
            sw->Close();
        }
        // Catch the IOException that is raised if the pipe is broken
        // or disconnected.
        catch (IOException^ e)
        {
            Console::WriteLine("[SERVER] Error: {0}", e->Message);
        }
        pipeServer->Close();
        pipeClient->WaitForExit();
        pipeClient->Close();
        Console::WriteLine("[SERVER] Client quit. Server terminating.");
    }
};

int main()
{
    PipeServer::Main();
}
//</snippet01>
//<snippet01>
using System;
using System.IO;
using System.IO.Pipes;
using System.Diagnostics;

class PipeServer
{
    static void Main()
    {
        Process pipeClient = new Process();

        pipeClient.StartInfo.FileName = "pipeClient.exe";

        using (AnonymousPipeServerStream pipeServer =
            new AnonymousPipeServerStream(PipeDirection.Out,
            HandleInheritability.Inheritable))
        {
            Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
                pipeServer.TransmissionMode);

            // Pass the client process a handle to the server.
            pipeClient.StartInfo.Arguments =
                pipeServer.GetClientHandleAsString();
            pipeClient.StartInfo.UseShellExecute = false;
            pipeClient.Start();

            pipeServer.DisposeLocalCopyOfClientHandle();

            try
            {
                // Read user input and send that to the client process.
                using (StreamWriter sw = new StreamWriter(pipeServer))
                {
                    sw.AutoFlush = true;
                    // Send a 'sync message' and wait for client to receive it.
                    sw.WriteLine("SYNC");
                    pipeServer.WaitForPipeDrain();
                    // Send the console input to the client process.
                    Console.Write("[SERVER] Enter text: ");
                    sw.WriteLine(Console.ReadLine());
                }
            }
            // Catch the IOException that is raised if the pipe is broken
            // or disconnected.
            catch (IOException e)
            {
                Console.WriteLine("[SERVER] Error: {0}", e.Message);
            }
        }

        pipeClient.WaitForExit();
        pipeClient.Close();
        Console.WriteLine("[SERVER] Client quit. Server terminating.");
    }
}
//</snippet01>
'<snippet01>
Imports System.IO
Imports System.IO.Pipes
Imports System.Diagnostics

Class PipeServer
    Shared Sub Main()
        Dim pipeClient As New Process()

        pipeClient.StartInfo.FileName = "pipeClient.exe"

        Using pipeServer As New AnonymousPipeServerStream(PipeDirection.Out, _
            HandleInheritability.Inheritable)

            Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
                pipeServer.TransmissionMode)

            ' Pass the client process a handle to the server.
            pipeClient.StartInfo.Arguments = pipeServer.GetClientHandleAsString()
            pipeClient.StartInfo.UseShellExecute = false
            pipeClient.Start()

            pipeServer.DisposeLocalCopyOfClientHandle()

            Try
                ' Read user input and send that to the client process.
                Using sw As New StreamWriter(pipeServer)
                    sw.AutoFlush = true
                    ' Send a 'sync message' and wait for client to receive it.
                    sw.WriteLine("SYNC")
                    pipeServer.WaitForPipeDrain()
                    ' Send the console input to the client process.
                    Console.Write("[SERVER] Enter text: ")
                    sw.WriteLine(Console.ReadLine())
                End Using
            Catch e As IOException
                ' Catch the IOException that is raised if the pipe is broken
                ' or disconnected.
                Console.WriteLine("[SERVER] Error: {0}", e.Message)
            End Try
        End Using

        pipeClient.WaitForExit()
        pipeClient.Close()
        Console.WriteLine("[SERVER] Client quit. Server terminating.")
    End Sub
End Class
'</snippet01>

Comentários

Os pipes anônimos ajudam a fornecer comunicação de interprocesso segura e segura entre processos filho e pai. A classe AnonymousPipeServerStream permite que um processo pai envie ou receba informações de um processo filho.

Os pipes anônimos são pipes unidirecionais sem nome que normalmente transferem dados entre processos pai e filho. Pipes anônimos são sempre locais; eles não podem ser usados em uma rede. Não há suporte para um valor PipeDirection de InOut porque os pipes anônimos são definidos como unidirecionais.

Os pipes anônimos não dão suporte ao modo de leitura PipeTransmissionMode.Message.

O lado do cliente de um pipe anônimo deve ser criado a partir de um identificador de pipe fornecido pelo lado do servidor chamando o método GetClientHandleAsString. Em seguida, a cadeia de caracteres é passada como um parâmetro ao criar o processo do cliente. No processo do cliente, ele é passado para o construtor AnonymousPipeClientStream como o parâmetro pipeHandleAsString.

O objeto AnonymousPipeServerStream deve descartar o identificador do cliente usando o método DisposeLocalCopyOfClientHandle para ser notificado quando o cliente for encerrado.

Construtores

AnonymousPipeServerStream()

Inicializa uma nova instância da classe AnonymousPipeServerStream.

AnonymousPipeServerStream(PipeDirection)

Inicializa uma nova instância da classe AnonymousPipeServerStream com a direção de pipe especificada.

AnonymousPipeServerStream(PipeDirection, HandleInheritability)

Inicializa uma nova instância da classe AnonymousPipeServerStream com a direção do pipe e o modo de herdabilidade especificados.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32)

Inicializa uma nova instância da classe AnonymousPipeServerStream com a direção do pipe, o modo de herdabilidade e o tamanho do buffer especificados.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity)

Inicializa uma nova instância da classe AnonymousPipeServerStream com a direção do pipe, o modo de herdabilidade, o tamanho do buffer e a segurança de pipe especificados.

AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle)

Inicializa uma nova instância da classe AnonymousPipeServerStream das alças de pipe especificadas.

Propriedades

CanRead

Obtém um valor que indica se o fluxo atual dá suporte a operações de leitura.

(Herdado de PipeStream)
CanSeek

Obtém um valor que indica se o fluxo atual dá suporte a operações de busca.

(Herdado de PipeStream)
CanTimeout

Obtém um valor que determina se o fluxo atual pode acabar.

(Herdado de Stream)
CanWrite

Obtém um valor que indica se o fluxo atual dá suporte a operações de gravação.

(Herdado de PipeStream)
ClientSafePipeHandle

Obtém o identificador seguro do objeto AnonymousPipeClientStream que está atualmente conectado ao objeto AnonymousPipeServerStream.

InBufferSize

Obtém o tamanho, em bytes, do buffer de entrada de um pipe.

(Herdado de PipeStream)
IsAsync

Obtém um valor que indica se um objeto PipeStream foi aberto de forma assíncrona ou síncrona.

(Herdado de PipeStream)
IsConnected

Obtém ou define um valor que indica se um objeto PipeStream está conectado.

(Herdado de PipeStream)
IsHandleExposed

Obtém um valor que indica se um identificador para um objeto PipeStream é exposto.

(Herdado de PipeStream)
IsMessageComplete

Obtém um valor que indica se há mais dados na mensagem retornada da operação de leitura mais recente.

(Herdado de PipeStream)
Length

Obtém o comprimento de um fluxo, em bytes.

(Herdado de PipeStream)
OutBufferSize

Obtém o tamanho, em bytes, do buffer de saída de um pipe.

(Herdado de PipeStream)
Position

Obtém ou define a posição atual do fluxo atual.

(Herdado de PipeStream)
ReadMode

Define o modo de leitura para o objeto AnonymousPipeServerStream. Para pipes anônimos, o modo de transmissão deve ser Byte.

ReadTimeout

Obtém ou define um valor, em milissegundos, que determina quanto tempo o fluxo tentará ler antes do tempo limite.

(Herdado de Stream)
SafePipeHandle

Obtém o identificador seguro para a extremidade local do pipe que o objeto PipeStream atual encapsula.

(Herdado de PipeStream)
TransmissionMode

Obtém o modo de transmissão de pipe compatível com o pipe atual.

WriteTimeout

Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará gravar antes do tempo limite.

(Herdado de Stream)

Métodos

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

Inicia uma operação de leitura assíncrona.

(Herdado de PipeStream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Inicia uma operação de gravação assíncrona.

(Herdado de PipeStream)
CheckPipePropertyOperations()

Verifica se o pipe está em um estado adequado para obter ou definir propriedades.

(Herdado de PipeStream)
CheckReadOperations()

Verifica se o pipe está em um estado conectado para operações de leitura.

(Herdado de PipeStream)
CheckWriteOperations()

Verifica se o pipe está em um estado conectado para operações de gravação.

(Herdado de PipeStream)
Close()

Fecha o fluxo atual e libera todos os recursos (como soquetes e identificadores de arquivo) associados ao fluxo atual. Em vez de chamar esse método, verifique se o fluxo foi descartado corretamente.

(Herdado de Stream)
CopyTo(Stream)

Lê os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyTo(Stream, Int32)

Lê os bytes do fluxo atual e os grava em outro fluxo, usando um tamanho de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream)

Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, CancellationToken)

Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo, usando um token de cancelamento especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, Int32)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo, usando um tamanho de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo, usando um token de cancelamento e tamanho de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
CreateWaitHandle()
Obsoleto.
Obsoleto.
Obsoleto.

Aloca um objeto WaitHandle.

(Herdado de Stream)
Dispose()

Libera todos os recursos usados pelo Stream.

(Herdado de Stream)
Dispose(Boolean)

Libera os recursos não gerenciados usados pela classe PipeStream e, opcionalmente, libera os recursos gerenciados.

(Herdado de PipeStream)
DisposeAsync()

Libera de forma assíncrona os recursos não gerenciados usados pelo Stream.

(Herdado de Stream)
DisposeLocalCopyOfClientHandle()

Fecha a cópia local do identificador do objeto AnonymousPipeClientStream.

EndRead(IAsyncResult)

Encerra uma solicitação de leitura assíncrona pendente.

(Herdado de PipeStream)
EndWrite(IAsyncResult)

Encerra uma solicitação de gravação assíncrona pendente.

(Herdado de PipeStream)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Libera recursos não gerenciados e executa outras operações de limpeza antes que a instância de AnonymousPipeServerStream seja recuperada pela coleta de lixo.

Flush()

Limpa o buffer do fluxo atual e faz com que todos os dados em buffer sejam gravados no dispositivo subjacente.

(Herdado de PipeStream)
FlushAsync()

Limpa de forma assíncrona todos os buffers para esse fluxo e faz com que todos os dados em buffer sejam gravados no dispositivo subjacente.

(Herdado de Stream)
FlushAsync(CancellationToken)

Limpa de forma assíncrona o buffer do fluxo atual e faz com que todos os dados em buffer sejam gravados no dispositivo subjacente.

(Herdado de PipeStream)
GetAccessControl()

Obtém um objeto PipeSecurity que encapsula as entradas acl (lista de controle de acesso) para o pipe descrito pelo objeto PipeStream atual.

(Herdado de PipeStream)
GetClientHandleAsString()

Obtém o identificador do objeto AnonymousPipeClientStream conectado como uma cadeia de caracteres.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeHandle(SafePipeHandle, Boolean, Boolean)

Inicializa um objeto PipeStream do objeto SafePipeHandle especificado.

(Herdado de PipeStream)
InitializeLifetimeService()
Obsoleto.

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida dessa instância.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.

(Herdado de MarshalByRefObject)
ObjectInvariant()
Obsoleto.

Fornece suporte para um Contract.

(Herdado de Stream)
Read(Byte[], Int32, Int32)

Lê um bloco de bytes de um fluxo e grava os dados em um buffer especificado começando em uma posição especificada para um comprimento especificado.

(Herdado de PipeStream)
Read(Span<Byte>)

Lê uma sequência de bytes do fluxo atual, grava-os em uma matriz de bytes e avança a posição dentro do fluxo pelo número de bytes lidos.

(Herdado de PipeStream)
ReadAsync(Byte[], Int32, Int32)

Lê de forma assíncrona uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

(Herdado de Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo atual para uma matriz de bytes começando em uma posição especificada para um número especificado de bytes, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento.

(Herdado de PipeStream)
ReadAsync(Memory<Byte>, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo atual, grava-os em um intervalo de memória de bytes, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento.

(Herdado de PipeStream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Lê pelo menos um número mínimo de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

(Herdado de Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Lê de forma assíncrona pelo menos um número mínimo de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento.

(Herdado de Stream)
ReadByte()

Lê um byte de um pipe.

(Herdado de PipeStream)
ReadExactly(Byte[], Int32, Int32)

count número de bytes do fluxo atual e avança a posição dentro do fluxo.

(Herdado de Stream)
ReadExactly(Span<Byte>)

Lê bytes do fluxo atual e avança a posição dentro do fluxo até que a buffer seja preenchida.

(Herdado de Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Lê de forma assíncrona count número de bytes do fluxo atual, avança a posição dentro do fluxo e monitora solicitações de cancelamento.

(Herdado de Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Lê bytes de forma assíncrona do fluxo atual, avança a posição dentro do fluxo até que o buffer seja preenchido e monitore as solicitações de cancelamento.

(Herdado de Stream)
Seek(Int64, SeekOrigin)

Define a posição atual do fluxo atual como o valor especificado.

(Herdado de PipeStream)
SetAccessControl(PipeSecurity)

Aplica as entradas de ACL (lista de controle de acesso) especificadas por um objeto PipeSecurity ao pipe especificado pelo objeto PipeStream atual.

(Herdado de PipeStream)
SetLength(Int64)

Define o comprimento do fluxo atual como o valor especificado.

(Herdado de PipeStream)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
WaitForPipeDrain()

Aguarda a outra extremidade do pipe ler todos os bytes enviados.

(Herdado de PipeStream)
Write(Byte[], Int32, Int32)

Grava um bloco de bytes no fluxo atual usando dados de um buffer.

(Herdado de PipeStream)
Write(ReadOnlySpan<Byte>)

Grava uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes gravados.

(Herdado de PipeStream)
WriteAsync(Byte[], Int32, Int32)

Grava de forma assíncrona uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes gravados.

(Herdado de Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Grava de forma assíncrona um número especificado de bytes de uma matriz de bytes começando em uma posição especificada, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora solicitações de cancelamento.

(Herdado de PipeStream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Grava de forma assíncrona uma sequência de bytes no fluxo atual, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora solicitações de cancelamento.

(Herdado de PipeStream)
WriteByte(Byte)

Grava um byte no fluxo atual.

(Herdado de PipeStream)

Métodos de Extensão

CopyToAsync(Stream, PipeWriter, CancellationToken)

Lê assíncronamente os bytes do Stream e os grava no PipeWriterespecificado usando um token de cancelamento.

GetAccessControl(PipeStream)

Retorna as informações de segurança de um fluxo de pipe.

SetAccessControl(PipeStream, PipeSecurity)

Altera os atributos de segurança de um fluxo de pipe existente.

ConfigureAwait(IAsyncDisposable, Boolean)

Configura como as esperas nas tarefas retornadas de um descartável assíncrono serão executadas.

Aplica-se a