Использование. Net основное консольное приложение и IpcServiceFramework
В этом случае есть одно приложение, работающее в качестве диспетчера.
using System;
using System.Threading.Tasks;
using Contracts;
using JKang.IpcServiceFramework;
class Program
{
static async Task Main(string[] args)
{
var client = new IpcServiceClientBuilder<IContract>()
.UseNamedPipe("pipeName")
.Build();
while (true)
{
var random = new Random().Next();
await client.InvokeAsync(x => x.SetNumber(random));
}
}
}
Все, что он делает, это Я понимаю, соединяется по имени канала и начинает разбивать на этот метод SetNumber ()
Тогда у нас есть Contract.cs
public class Contract : IContract
{
public int Number { get; set; }
public void SetNumber(int val) => Number = val;
}
, который я хотел бы быть в качестве государства, между двумя приложениями.
И есть приложение, которое что-то делает.
static void Main(string[] args)
{
IServiceCollection services = new ServiceCollection();
services.AddSingleton<IContract, Contract>();
var serviceCollection = services.AddIpc(builder => { builder.AddNamedPipe(options => { options.ThreadCount = 2; }); });
var buildServiceProvider = serviceCollection.BuildServiceProvider();
new IpcServiceHostBuilder(services.BuildServiceProvider())
.AddNamedPipeEndpoint<IContract>(name: "endpoint1", pipeName: "pipeName")
.AddTcpEndpoint<IContract>(name: "endpoint2", ipEndpoint: IPAddress.Loopback, port: 45684)
.Build()
.RunAsync();
Task.Factory.StartNew(() =>
{
var contract = buildServiceProvider.GetService<IContract>();
while (true)
{
Console.WriteLine(" Iam just looping... ! ==> " + contract.Number);
Thread.Sleep(1500);
}
});
Console.ReadLine();
Environment.Exit(-1);
}
Как я понимаю, запускается IpcServiceHost, а затем просто печатается contract.Number через некоторое время l oop. Конечно, это всегда 0, поскольку оно никогда не обновляется.
Так что моя цель, чтобы предыдущий код мог обновлять переменную Number во время работы приложения. Я делаю что-то совершенно не так?
Например, если для целей тестирования я делаю public void SetNumber(int val) => Environment.Exit(-1);
, то это убивает приложение. Но это не цель здесь.
И, конечно, примеры копирования и вставки :)
РЕДАКТИРОВАТЬ: Есть ли способ для двусторонней связи?