我想创建一些将作为简单进程运行的服务,并将为其他应用程序提供向他发送xml流的可能性。
我的意思是使用无限循环创建简单的进程(exe) - 任何应用程序都能够将XML(文件/流)发送到此进程=>并且此过程将xml发送到某个套接字。
没有管道可以做到吗? 我想做一些像COM这样的事情 - 可以抓住'工作过程的实例。
答案 0 :(得分:5)
确定。
您可以在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
并在每个进程中打开一个视图以查看相同的mempry区域 - 并传输数据。 我认为这是最好的。
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.");
}
}
答案 1 :(得分:4)
只需使用侦听来自其他进程的连接的C#套接字并编写自定义XML文件接收器。
答案 2 :(得分:3)
是的,您当然可以使用TCP socket连接。如果您想避免在评论中启发的网络连接,您可以使用共享内存方法,例如使用Memory-Mapped Files。
答案 3 :(得分:2)
您正在寻找的是某种形式的IPC(进程间通信)。有很多可能性: