.netと.coreの間の単純なIPC
これは、.NETまたは.coreで使用され、必要に応じて混合されるIPCの薄型です。コンバージョンの「修正」はハックであり、後のリリースでは機能しない可能性があります。
20.09.2020に関しては、NetStandard 2.0と.NET 4.7.2の間で予想どおりに機能します。
クラスはKrakenipcに基づいています:https://github.com/darksody/krakenipcおよびフルデュプレックスパイプ:https://www.codeproject.com/articles/1179195/full
.NET472アプリケーションからデータを取得するために必要なASP.coreアプリケーションと、実際に機能した唯一のIPCはGRPC(https://grpc.io/)でした。 GRPCは私のプロジェクトではやり過ぎだったので、よりシンプルで小さなものが欲しかった。
クライアントのサーバーデータを待つ時間にカスタム遅延を追加しました。将来のタイムアウトの処理を容易にするために、nullの代わりに例外をスローするために戻り方法を変更しました。また、例外を抑制することにした場合にすべてをキャッチすることを確認するために、イベントも追加されます。
サーバーとクライアントは、共通のインターフェイスを共有する必要があります。
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" ; }
}これで、サーバーを作成すると、必要なのはChannelNameだけです。このパイプは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 ( ) ) ;
}Pipeconnectionが「接続タイムアウト」およびその他のエラーをスローするために例外ハンドリングが必要です。
私はこのクラスを複雑なクラスに使用したことがなく、これに対するサポートは不明です。
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 ( ) どんな貢献も大歓迎です:)