IPC sederhana antara .net dan .core
Ini adalah Lightversion dari IPC yang akan digunakan pada .NET atau .Core dan bahkan dicampur jika Anda suka. "Perbaikan" untuk konversi adalah peretasan dan mungkin tidak berfungsi untuk rilis nanti.
Adapun 20.09.2020 berfungsi seperti yang diharapkan antara NetStandard 2.0 dan .NET 4.7.2.
Kelas didasarkan pada krakenipc: https://github.com/darksody/krakenipc dan pipa dupleks penuh: https://www.codeproject.com/articles-write-write-write-pip
Saya memiliki aplikasi ASP.Core yang diperlukan untuk mendapatkan data dari aplikasi .NET472 dan satu -satunya IPC yang benar -benar berfungsi adalah GRPC (https://grpc.io/). GRPC berlebihan untuk proyek saya jadi saya menginginkan sesuatu yang lebih sederhana dan kecil.
Menambahkan penundaan khusus untuk waktu menunggu data server untuk klien. Mengubah metode pengembalian untuk melempar pengecualian alih -alih nol, untuk membuatnya lebih mudah untuk menangani batas waktu di masa depan. Juga sebuah acara ditambahkan, untuk memastikan bahwa Anda menangkap semuanya jika Anda memutuskan untuk menekan pengecualian.
Server dan klien perlu berbagi antarmuka umum.
public interface ISimple
{
int Number { get ; }
string Text { get ; }
}Server berisi data di antarmuka, di sini disajikan sebagai nilai statis. Anda dapat menggunakan tipe data yang paling umum; int, string, char, float, double, long dll ...
public class Simple : ISimple
{
public int Number { get => 111 ; }
public string Text { get => "Some string" ; }
}Sekarang buat server, yang dibutuhkan hanyalah nama saluran. Perhatikan bahwa pipa ini hanya berfungsi di 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 ( ) ) ;
}Ketika klien menghubungkannya akan merujuk ke antarmuka yang sama. Setelah koneksi digunakan untuk menerima data dari server
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 ( ) ) ;
}Pengecualian diperlukan untuk PipeConnection melempar "waktu koneksi" dan kesalahan lainnya.
Saya tidak pernah menggunakan kelas ini untuk kelas yang kompleks dan dukungan untuk ini tidak diketahui.
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 ( ) Kontribusi apa pun diterima :)