単純なプロセスとして実行され、他のアプリケーションにxmlストリームを送信する可能性を与えるサービスを作成したいと思います。
私が言いたいのは、無限ループで単純なプロセス(exe)を作成することです-そして、どのアプリケーションもこのプロセスにXML(ファイル/ストリーム)を送信できます=>そしてこのプロセスはxmlをいくつかのソケットに送信します。
パイプなしでそれを行うことは可能ですか?COMのようなことをしたい-作業プロセスのインスタンスを「キャッチ」できる。
もちろん。
名前付きパイプクラスはC#で使用できます:
サーバー:
using (var s = new NamedPipeServerStream ("myPipe"))
{
s.WaitForConnection();
s.WriteByte (100);
Console.WriteLine (s.ReadByte());
}
クライアントコード:
using (var s = new NamedPipeClientStream ("myPipe"))
{
s.Connect();
Console.WriteLine (s.ReadByte());
s.WriteByte (200);
}
あなたはファイルでそれを行うことができます。+systemfileWatcherクラス
ファイルをフォルダに入れます。
他のプロセスはこのフォルダを監査します。
そして今、あなたは情報を転送することができます。
memoryMappedFileを使用できます
各プロセスでビューを開いて、同じメモリ領域を表示し、データを転送します。最高だと思います。
static void Main(string[] args)
{
using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 4000))
{
bool mutexCreated;
Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(stream);
string st = "Hellow";
int stringSize = Encoding.UTF8.GetByteCount(st); //6
writer.Write(st);
writer.Write(123); //6+4 bytes = 10 bytes
}
mutex.ReleaseMutex();
Console.WriteLine("Start Process B and press ENTER to continue.");
Console.ReadLine();
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
Console.WriteLine("Process A says: {0}", reader.ReadString());
Console.WriteLine("Process A says: {0}", reader.ReadInt32());
Console.WriteLine("Process B says: {0}", reader.ReadInt32());
}
mutex.ReleaseMutex();
}
}
static void Main(string[] args)
{
try
{
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap"))
{
Mutex mutex = Mutex.OpenExisting("testmapmutex");
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream(11, 0)) // From the 11 byte....
{
BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8);
writer.Write(2);
}
mutex.ReleaseMutex();
}
}
catch (FileNotFoundException)
{
Console.WriteLine("Memory-mapped file does not exist. Run Process A first.");
}
}
他のプロセスからの接続をリッスンし、カスタムXMLファイルレシーバーを作成するC#ソケットを使用するだけです。
はい、もちろん、TCPソケット接続を使用できます。コメントで説明されているようにネットワーク接続を回避したい場合は、たとえばメモリマップトファイルを使用した共有メモリアプローチを使用できます。
あなたが探しているのは、ある種のIPC(プロセス間通信)です。非常に多くの可能性があります: