Простой IPC между .net и .core
Это световерсия IPC, который будет использоваться на .net или .core и даже смешанном, если хотите. «Исправление» для преобразования - это взлом и может не работать для более поздних выпусков.
Что касается 20.09.2020, он работает, как и ожидалось, между NetStandard 2.0 и .NET 4.7.2.
Класс основан на Krakenipc: https://github.com/darksody/krakenipc и полных дуплекс
У меня было приложение ASP.Core, которое необходимо для получения данных из приложения .NET472, и единственным МПК, который фактически работал, был GRPC (https://grpc.io/). GRPC был излишним для моего проекта, поэтому я хотел что -то проще и крошечное.
Добавлена пользовательская задержка, чтобы дождаться сервера данных для клиента. Изменен метод возврата, чтобы добавить исключение вместо нуля, чтобы упростить обработку тайм -аутов в будущем. Также добавлено событие, чтобы убедиться, что вы все поймаете, если решите подавить исключения.
Сервер и клиент должны поделиться общим интерфейсом.
public interface ISimple
{
int Number { get ; }
string Text { get ; }
}Сервер содержит данные в интерфейсе, представленные в виде статических значений. Вы можете использовать наиболее распространенные типы данных; int, String, char, Float, Double, Long и т. Д.
public class Simple : ISimple
{
public int Number { get => 111 ; }
public string Text { get => "Some string" ; }
}Теперь создайте сервер, все, что ему нужно, это имя канала. Обратите внимание, что эта труба работает только на Localhost
try
{
//Then create server
var handler = new SimpleCrossFrameworkIPC . Server < Simple , ISimple > ( ) ;
handler . Start ( "Channel" ) ;
//Pause for clients
Console . ReadLine ( ) ;
//Stop server
handler . Stop ( ) ;
}
catch ( Exception ex )
{
Console . WriteLine ( ex . ToString ( ) ) ;
}Когда клиент подключается, он будет ссылаться на тот же интерфейс. После подключения используется для получения данных с сервера
int nWaitForServerDataDelay = 2000 ; //2 sec max waiting for data
var client = new SimpleCrossFrameworkIPC . Client < IMySimpleService > ( nWaitForServerDataDelay ) ;
try
{
//Connect with a 1 second connection timeout
client . Connect ( "Channel" , 1000 ) ;
var proxy = client . GetProxy ( ) ;
//Print proxy-data to the console
Console . WriteLine ( "Text: " + proxy . Text ) ;
Console . WriteLine ( "Number: " + proxy . Number . ToString ( ) ) ;
}
catch ( Exception ex )
{
Console . WriteLine ( ex . ToString ( ) ) ;
}ExceptionHandling необходим для пропусков, который бросает «съемки подключения» и другие ошибки.
Я никогда не использовал этот класс для сложных классов, и поддержка этого неизвестна.
public event EventHandler < EventArgs > ClientConnected ;
public event EventHandler < EventArgs > ClientDisconnected ; void Start ( string Pipename )
void Stop ( )
public T GetProxy ( ) public event EventHandler < EventArgs > ClientDisconnected ; void Connect ( string Pipename )
void Connect ( string Pipename , int Timeout )
public void Disconnect ( )
public bool IsConnected ( )
void UseProxy ( Action < T > callback )
public T GetProxy ( ) Любой вклад приветствуется :)