App1 と app2 という 2 つの異なる winform アプリケーションがあります。App1 は (DOS コマンド ウィンドウを使用して) app2 の exe を呼び出し、メッセージを送信して app2 を開始します。app2 は実行を開始し、タスクを終了すると、実行が成功したことを示すメッセージを app1 に送り返します。WCF を使用してこの機能を実現するにはどうすればよいですか。以前は同じコードが foxpro で書かれており、このフィンクはメモリ管理を使用して実現されていました。
3 に答える
必要なのは、2つのアプリケーション(同じマシンで実行されている場合とされていない場合があります)が互いに非同期でメッセージを送信するピアツーピア通信だと思います。これは、MSNMessengerなどのチャットプログラムの動作方法です。
MSDNには、WCFを使用したピアツーピア通信に関する「簡単な」チュートリアルがあります。
念のために言っておきますが、これは思ったほど簡単ではありません。Windowsを使用してメッセージを送信するSendMessage
ことをお勧めします。
これは、これを達成するための概念的な方法です。
WCF サービスを実装する必要があります。このタスクを実行する方法はたくさんあります。これの1つはこのようにする必要があります。
App1 はサービス メソッドを呼び出し、app2 を実行する必要があることを伝えます。App1 は応答を待つことができます。
App2 は時々サービスに ping を送信して、実行する必要があるかどうかを確認します。App2 はジョブを終了し、サービス メソッドを呼び出して、ジョブが完了したことを通知します。
App1 は、終了時に応答を受け取ります。
他のオプションは、要求/応答を実装するのではなく、App1 からサービスに ping を実行して、App2 がその仕事をしたかどうかを確認することです。
WCF サービスの実装方法については、次の例を参照してください。 http://wcftutorial.net/WCF-Getting-Started.aspx
基本的:
一方では「サーバー」をインスタンス化します
UIIServiceHost = new ServiceHost(typeof(UIInterop));
UIIServiceHost.Open();
UIInterop は、サービス コントラクトである IUIInterop を実装するクラスです。
using System.ServiceModel;
[ServiceContract]
public interface IUIInterop {
[OperationContract]
void SetControlValue (UIControl c);
}
[DataContract]
public class UIControl {
[DataMember]
public String Name { get; set; }
[DataMember]
public String Value { get; set; }
}
プロキシ クラスを生成する => UIInteropClient
反対側では、プロキシ クラスを使用してクライアントを実装します。
using ( UIInteropClient proxy = new UIInteropClient("nameDependingOfAppConfig") ) {
proxy.SetControlValue(new UIControl {});
}
=====編集=====
クラスとインターフェースの名前は、私の想像力の欠如を反映しているだけです