Cysharp / Cysharp/MessagePipe

How to properly start NamedPipe Interprocess server

Open
#159 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
2k
Forks
133
PR merge metrics
No merged PRs in 30d

Description

I'm using MessagePipeInterprocess with NamedPipe mode and encountered an issue starting the server.
If I comment out the line provider.GetRequiredService();, the NamedPipe server fails to start and the client cannot connect and send requests.

I have two questions:
Is calling provider.GetRequiredService(); mandatory for the NamedPipe server to work?
What is the official best practice to launch the NamedPipe Interprocess server correctly?

Server Code Snippet

ServiceCollection services = new();
services.AddMessagePipe()
    .AddNamedPipeInterprocess("Test", options =>
    {
        options.HostAsServer = true;
    });

await using ServiceProvider provider = services.BuildServiceProvider();

provider.GetRequiredService<NamedPipeWorker>();    // If this line is commented, the server does not work

Console.ReadLine();

public class PingHandler : IAsyncRequestHandler<Ping, Pong>
{
    public ValueTask<Pong> InvokeAsync(Ping request, CancellationToken cancellationToken = new CancellationToken())
    {
        return ValueTask.FromResult(new Pong()
        {
            Value = request.Value + 100
        });
    }
}

Client Code Snippet

ServiceCollection services = new();
services.AddMessagePipe()
    .AddNamedPipeInterprocess("Test", options =>
    {
        options.HostAsServer = false;
    });

await using ServiceProvider provider = services.BuildServiceProvider();

IRemoteRequestHandler<Ping, Pong> pingHandler = provider.GetRequiredService<IRemoteRequestHandler<Ping, Pong>>();

var result = await pingHandler.InvokeAsync(new()
{
    Value = 100,
});

Shared MessagePack Models

[MessagePackObject]
public class Ping
{
    [Key(0)]
    public int Value { get; set; }
}

[MessagePackObject]
public class Pong
{
    [Key(0)]
    public int Value { get; set; }
}

Environment

  • Library: MessagePipe 1.8.2 + MessagePipe.Interprocess 1.8.2

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with AddNamedPipeInterprocess and the NamedPipeWorker entry point, using the supplied server and client snippets to reproduce the connection failure when the worker is not resolved. Check how server startup is registered and initialized; done when the required startup sequence or best practice is confirmed and documented, with the sample behavior verified.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
distributed-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.