4

App1 と app2 という 2 つの異なる winform アプリケーションがあります。App1 は (DOS コマンド ウィンドウを使用して) app2 の exe を呼び出し、メッセージを送信して app2 を開始します。app2 は実行を開始し、タスクを終了すると、実行が成功したことを示すメッセージを app1 に送り返します。WCF を使用してこの機能を実現するにはどうすればよいですか。以前は同じコードが foxpro で書かれており、このフィンクはメモリ管理を使用して実現されていました。

4

3 に答える 3

1

必要なのは、2つのアプリケーション(同じマシンで実行されている場合とされていない場合があります)が互いに非同期でメッセージを送信するピアツーピア通信だと思います。これは、MSNMessengerなどのチャットプログラムの動作方法です。

MSDNには、WCFを使用したピアツーピア通信に関する「簡単な」チュートリアルがあります。

念のために言っておきますが、これは思ったほど簡単ではありません。Windowsを使用してメッセージを送信するSendMessageことをお勧めします。

于 2013-01-23T09:51:01.303 に答える
0

これは、これを達成するための概念的な方法です。

WCF サービスを実装する必要があります。このタスクを実行する方法はたくさんあります。これの1つはこのようにする必要があります。

App1 はサービス メソッドを呼び出し、app2 を実行する必要があることを伝えます。App1 は応答を待つことができます。

App2 は時々サービスに ping を送信して、実行する必要があるかどうかを確認します。App2 はジョブを終了し、サービス メソッドを呼び出して、ジョブが完了したことを通知します。

App1 は、終了時に応答を受け取ります。

他のオプションは、要求/応答を実装するのではなく、App1 からサービスに ping を実行して、App2 がその仕事をしたかどうかを確認することです。

WCF サービスの実装方法については、次の例を参照してください。 http://wcftutorial.net/WCF-Getting-Started.aspx

于 2013-01-23T09:36:51.120 に答える
0

基本的:

一方では「サーバー」をインスタンス化します

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 {});
}

=====編集=====

クラスとインターフェースの名前は、私の想像力の欠如を反映しているだけです

于 2013-01-23T09:52:20.920 に答える