2つの異なるサービス間で通信する方法はありますか?すでに実行されているサービスがあります。最初のサービスに接続して日付を送受信できる2番目のサービスを作成する方法はありますか?
また、コンソールアプリケーションからWindowsサービスにアクセスして接続したいと思います。出来ますか?
2つの異なるサービス間で通信する方法はありますか?すでに実行されているサービスがあります。最初のサービスに接続して日付を送受信できる2番目のサービスを作成する方法はありますか?
また、コンソールアプリケーションからWindowsサービスにアクセスして接続したいと思います。出来ますか?
次を使用して、これを実装してみることができます。
WCFの使用例:WCFとNetNamedPipeBindinを使用した多対1のローカルIPC。
その他の例:プロセス間同期と通信のためのAC#フレームワーク。
すべては、使用する.NETFrameworkのバージョンによって異なります。.NET 3.0以降を使用している場合は、WCFを調べることができます。そうでない場合は、あなたはあなた自身であり、キーワードP / Invoke(CreateFileMapping、MapViewOfFile、CreatePipe ...)をグーグルで検索できます。
まず、tcpclientとtcpserverをいじってみます
http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx
送信する必要のあるデータが日付よりも複雑な場合でも、簡単にシリアル化/逆シリアル化できます。
日付の送受信については、これが最も簡単なオプションです。
また、サービスが異なるマシンで実行されている場合はソックスが機能しますが、共有メモリと名前付きパイプは機能しません。
サンプルコード
// Create a thread running this code in your onstarted method of the service
using System.IO;
using System.Net;
using System.Net.Sockets;
var server = new TcpListener(IPAddress.Parse("127.0.0.1"), 8889);
server.Start();
while(true) {
var client = server.AcceptTcpClient();
using(var sr = new StreamReader(client.GetStream())) {
var date = DateTime.Parse(sr.ReadToEnd());
Console.WriteLine(date);
}
}
// In the console
using System.IO;
using System.Net;
using System.Net.Sockets;
var client = new TcpClient("localhost",8889);
using(var sw = new StreamWriter(client.GetStream())) {
sw.Write(System.DateTime.Now);
}