AnonymousPipeServerStream Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет поток вокруг анонимного канала, который поддерживает синхронные и асинхронные операции чтения и записи.
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
- Наследование
- Наследование
Примеры
В следующем примере строка из родительского процесса отправляется в дочерний процесс с помощью анонимных каналов. В этом примере создается AnonymousPipeServerStream объект в родительском процессе со значением PipeDirectionPipeDirection.Out. Он также создает AnonymousPipeClientStream объект в дочернем процессе со значением PipeDirectionPipeDirection.In. Затем родительский процесс отправляет в дочерний процесс строку, предоставленную пользователем. Строка отображается в консоли.
В этом примере используется серверный процесс, который использует AnonymousPipeServerStream класс. Полный пример кода, включая код для клиента и сервера канала, см. в разделе "Практическое руководство. Использование анонимных каналов для локальной межпроцессной связи".
//<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>
Комментарии
Анонимные каналы помогают обеспечить безопасное и безопасное взаимодействие между дочерними и родительскими процессами. Класс AnonymousPipeServerStream позволяет родительскому процессу отправлять или получать информацию из дочернего процесса.
Анонимные каналы не именуются, односторонние каналы, которые обычно передают данные между родительскими и дочерними процессами. Анонимные каналы всегда являются локальными; их нельзя использовать через сеть. PipeDirection Значение InOut не поддерживается, так как анонимные каналы определены как односторонние.
Анонимные каналы не поддерживают PipeTransmissionMode.Message режим чтения.
Клиентская сторона анонимного канала должна быть создана с помощью дескриптора GetClientHandleAsString канала, предоставленного сервером, путем вызова метода. Затем строка передается в качестве параметра при создании клиентского процесса. Затем из клиентского AnonymousPipeClientStream процесса он передается конструктору pipeHandleAsString в качестве параметра.
Объект AnonymousPipeServerStream должен удалить дескриптор клиента с помощью DisposeLocalCopyOfClientHandle метода, чтобы получать уведомления при выходе клиента.
Конструкторы
| Имя | Описание |
|---|---|
| AnonymousPipeServerStream() |
Инициализирует новый экземпляр класса AnonymousPipeServerStream. |
| AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity) |
Инициализирует новый экземпляр класса с указанным направлением канала, режимом наследования, размером буфера AnonymousPipeServerStream и безопасностью канала. |
| AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32) |
Инициализирует новый экземпляр AnonymousPipeServerStream класса с указанным направлением канала, режимом наследования и размером буфера. |
| AnonymousPipeServerStream(PipeDirection, HandleInheritability) |
Инициализирует новый экземпляр AnonymousPipeServerStream класса с указанным направлением канала и режимом наследования. |
| AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle) |
Инициализирует новый экземпляр AnonymousPipeServerStream класса из указанных дескрипторов канала. |
| AnonymousPipeServerStream(PipeDirection) |
Инициализирует новый экземпляр AnonymousPipeServerStream класса с указанным направлением канала. |
Свойства
| Имя | Описание |
|---|---|
| CanRead |
Возвращает значение, указывающее, поддерживает ли текущий поток операции чтения. (Унаследовано от PipeStream) |
| CanSeek |
Возвращает значение, указывающее, поддерживает ли текущий поток операции поиска. (Унаследовано от PipeStream) |
| CanTimeout |
Возвращает значение, определяющее, может ли текущий поток истекает время ожидания. (Унаследовано от Stream) |
| CanWrite |
Возвращает значение, указывающее, поддерживает ли текущий поток операции записи. (Унаследовано от PipeStream) |
| ClientSafePipeHandle |
Возвращает безопасный дескриптор для AnonymousPipeClientStream объекта, который в настоящее время подключен к объекту AnonymousPipeServerStream . |
| InBufferSize |
Возвращает размер в байтах входящего буфера для канала. (Унаследовано от PipeStream) |
| IsAsync |
Возвращает значение, указывающее, был ли PipeStream объект открыт асинхронно или синхронно. (Унаследовано от PipeStream) |
| IsConnected |
Возвращает или задает значение, указывающее, подключен ли PipeStream объект. (Унаследовано от PipeStream) |
| IsHandleExposed |
Возвращает значение, указывающее, предоставляется ли дескриптор PipeStream объекту. (Унаследовано от PipeStream) |
| IsMessageComplete |
Возвращает значение, указывающее, есть ли в сообщении больше данных, возвращаемых из последней операции чтения. (Унаследовано от PipeStream) |
| Length |
Возвращает длину потока в байтах. (Унаследовано от PipeStream) |
| OutBufferSize |
Возвращает размер в байтах исходящего буфера для канала. (Унаследовано от PipeStream) |
| Position |
Возвращает или задает текущее положение текущего потока. (Унаследовано от PipeStream) |
| ReadMode |
Задает режим чтения для AnonymousPipeServerStream объекта. Для анонимных каналов должен быть Byteрежим передачи. |
| ReadTimeout |
Возвращает или задает значение в миллисекундах, которое определяет, сколько времени поток попытается прочитать до истечения времени ожидания. (Унаследовано от Stream) |
| SafePipeHandle |
Возвращает безопасный дескриптор для локального конца канала, который инкапсулирует текущий PipeStream объект. (Унаследовано от PipeStream) |
| TransmissionMode |
Возвращает режим передачи канала, поддерживаемый текущим каналом. |
| WriteTimeout |
Возвращает или задает значение в миллисекундах, определяющее, сколько времени поток попытается записать до истечения времени ожидания. (Унаследовано от Stream) |
Методы
| Имя | Описание |
|---|---|
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает асинхронную операцию чтения. (Унаследовано от PipeStream) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает асинхронную операцию записи. (Унаследовано от PipeStream) |
| CheckPipePropertyOperations() |
Проверяет, находится ли канал в правильном состоянии для получения или задания свойств. (Унаследовано от PipeStream) |
| CheckReadOperations() |
Проверяет, находится ли канал в подключенном состоянии для операций чтения. (Унаследовано от PipeStream) |
| CheckWriteOperations() |
Проверяет, находится ли канал в подключенном состоянии для операций записи. (Унаследовано от PipeStream) |
| Close() |
Закрывает текущий поток и освобождает все ресурсы (например, сокеты и дескрипторы файлов), связанные с текущим потоком. Вместо вызова этого метода убедитесь, что поток правильно удален. (Унаследовано от Stream) |
| CopyTo(Stream, Int32) |
Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyTo(Stream) |
Считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток с помощью указанного маркера отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream, Int32, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и маркер отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream, Int32) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CreateObjRef(Type) |
Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
| CreateWaitHandle() |
Устаревшие.
Устаревшие.
Устаревшие.
Выделяет объект WaitHandle. (Унаследовано от Stream) |
| Dispose() |
Освобождает все ресурсы, используемые параметром Stream. (Унаследовано от Stream) |
| Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые классом PipeStream , и при необходимости освобождает управляемые ресурсы. (Унаследовано от PipeStream) |
| DisposeAsync() |
Асинхронно освобождает неуправляемые ресурсы, используемые Streamв . (Унаследовано от Stream) |
| DisposeLocalCopyOfClientHandle() |
Закрывает локальную копию дескриптора AnonymousPipeClientStream объекта. |
| EndRead(IAsyncResult) |
Завершает ожидающий асинхронный запрос на чтение. (Унаследовано от PipeStream) |
| EndWrite(IAsyncResult) |
Завершает ожидающий асинхронный запрос на запись. (Унаследовано от PipeStream) |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| Finalize() |
Освобождает неуправляемые ресурсы и выполняет другие операции очистки перед AnonymousPipeServerStream восстановлением экземпляра сборкой мусора. |
| Flush() |
Очищает буфер для текущего потока и приводит к записи буферных данных на базовое устройство. (Унаследовано от PipeStream) |
| FlushAsync() |
Асинхронно очищает все буферы для этого потока и приводит к записи всех буферных данных на базовое устройство. (Унаследовано от Stream) |
| FlushAsync(CancellationToken) |
Асинхронно очищает буфер для текущего потока и приводит к записи буферных данных на базовое устройство. (Унаследовано от PipeStream) |
| GetAccessControl() |
PipeSecurity Возвращает объект, инкапсулирующий записи списка управления доступом (ACL) для канала, описанного текущим PipeStream объектом. (Унаследовано от PipeStream) |
| GetClientHandleAsString() |
Возвращает дескриптор подключенного AnonymousPipeClientStream объекта в виде строки. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetLifetimeService() |
Устаревшие.
Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| InitializeHandle(SafePipeHandle, Boolean, Boolean) |
Инициализирует PipeStream объект из указанного SafePipeHandle объекта. (Унаследовано от PipeStream) |
| InitializeLifetimeService() |
Устаревшие.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| MemberwiseClone(Boolean) |
Создает неглубокую копию текущего MarshalByRefObject объекта. (Унаследовано от MarshalByRefObject) |
| ObjectInvariant() |
Устаревшие.
Предоставляет поддержку Contract. (Унаследовано от Stream) |
| Read(Byte[], Int32, Int32) |
Считывает блок байтов из потока и записывает данные в указанный буфер, начиная с указанной позиции для указанной длины. (Унаследовано от PipeStream) |
| Read(Span<Byte>) |
Считывает последовательность байтов из текущего потока, записывает их в массив байтов и перемещает позицию в потоке по количеству байтов, считываемых. (Унаследовано от PipeStream) |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока в массив байтов, начиная с указанного числа байтов, перемещает позицию в потоке по числу операций чтения байтов и отслеживает запросы на отмену. (Унаследовано от PipeStream) |
| ReadAsync(Byte[], Int32, Int32) |
Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию в потоке по числу байтов. (Унаследовано от Stream) |
| ReadAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока, записывает их в диапазон памяти байтов, перемещает позицию в потоке по количеству байтов, считываемых и отслеживает запросы на отмену. (Унаследовано от PipeStream) |
| ReadAtLeast(Span<Byte>, Int32, Boolean) |
Считывает по крайней мере минимальное количество байтов из текущего потока и перемещает положение в потоке по количеству байтов, считываемых. (Унаследовано от Stream) |
| ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Асинхронно считывает по крайней мере минимальное количество байтов из текущего потока, перемещает положение в потоке по количеству операций чтения байтов и отслеживает запросы на отмену. (Унаследовано от Stream) |
| ReadByte() |
Считывает байт из канала. (Унаследовано от PipeStream) |
| ReadExactly(Byte[], Int32, Int32) |
Считывает количество байтов из текущего потока и перемещает |
| ReadExactly(Span<Byte>) |
Считывает байты из текущего потока и перемещает положение в потоке, пока не будет заполнено |
| ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает количество байтов из текущего потока, перемещает |
| ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает байты из текущего потока, перемещает положение в потоке до тех пор, пока не |
| Seek(Int64, SeekOrigin) |
Задает текущее положение текущего потока указанным значением. (Унаследовано от PipeStream) |
| SetAccessControl(PipeSecurity) |
Применяет записи списка управления доступом (ACL), указанные объектом, к каналу, указанному PipeSecurity текущим PipeStream объектом. (Унаследовано от PipeStream) |
| SetLength(Int64) |
Задает длину текущего потока заданному значению. (Унаследовано от PipeStream) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| WaitForPipeDrain() |
Ожидает, пока другой конец канала будет считывать все отправленные байты. (Унаследовано от PipeStream) |
| Write(Byte[], Int32, Int32) |
Записывает блок байтов в текущий поток с помощью данных из буфера. (Унаследовано от PipeStream) |
| Write(ReadOnlySpan<Byte>) |
Записывает последовательность байтов в текущий поток и перемещает текущую позицию в этом потоке по количеству записанных байтов. (Унаследовано от PipeStream) |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно записывает указанное число байтов из массива байтов, начиная с указанной позиции, перемещает текущую позицию в этом потоке по количеству записанных байтов и отслеживает запросы на отмену. (Унаследовано от PipeStream) |
| WriteAsync(Byte[], Int32, Int32) |
Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию в этом потоке по количеству записанных байтов. (Унаследовано от Stream) |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию в этом потоке по количеству записанных байтов и отслеживает запросы на отмену. (Унаследовано от PipeStream) |
| WriteByte(Byte) |
Записывает байт в текущий поток. (Унаследовано от PipeStream) |
Методы расширения
| Имя | Описание |
|---|---|
| ConfigureAwait(IAsyncDisposable, Boolean) |
Настраивает способ ожидания задач, возвращаемых из асинхронного удаления. |
| CopyToAsync(Stream, PipeWriter, CancellationToken) |
Асинхронно считывает байты из Stream указанных и записывает их в указанный PipeWriterмаркер отмены. |
| GetAccessControl(PipeStream) |
Возвращает сведения о безопасности потока канала. |
| SetAccessControl(PipeStream, PipeSecurity) |
Изменяет атрибуты безопасности существующего потока канала. |