4

2つの異なるサービス間で通信する方法はありますか?すでに実行されているサービスがあります。最初のサービスに接続して日付を送受信できる2番目のサービスを作成する方法はありますか?

また、コンソールアプリケーションからWindowsサービスにアクセスして接続したいと思います。出来ますか?

4

2 に答える 2

7

次を使用して、これを実装してみることができます。

WCFの使用例:WCFとNetNamedPipeBindinを使用した多対1のローカルIPC

その他の例:プロセス間同期と通信のためのAC#フレームワーク

すべては、使用する.NETFrameworkのバージョンによって異なります。.NET 3.0以降を使用している場合は、WCFを調べることができます。そうでない場合は、あなたはあなた自身であり、キーワードP / Invoke(CreateFileMapping、MapViewOfFile、CreatePipe ...)をグーグルで検索できます。

于 2011-03-30T13:26:45.247 に答える
3

まず、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);
}
于 2011-03-30T13:40:34.747 に答える