两个Winform应用程序之间如何使用WCF通信?

4

我有两个不同的winform应用程序,App1和app2。 App1调用app2的exe文件(使用DOS命令窗口),并发送消息以启动app2。 app2开始执行,一旦完成其任务,它会向app1发送消息,指示执行成功。如何使用WCF实现此功能。 之前,相同的代码是使用foxpro编写的,并且使用内存管理实现了此功能。


哇,你居然说“FoxPro”,那可是一门古老的语言啊。你是在说这个WinForm应用程序是一个FoxPro窗口应用程序吗?关于使用WCF,你打算怎么做?是要将其变成服务应用程序吗? - MethodMan
是的,该应用程序最初是使用Foxpro编写的,但现在我们正在将代码从Foxpro迁移到C#.net 4.0。 - Murtaza Badshah
2
好的,我只是确保一下...我以为我又回到了旧的Clipper/FoxPro编码日子的噩梦中.. 哈哈 - MethodMan
3个回答

1
我认为你想要的是点对点通信,即两个应用程序(可能在同一台机器上运行,也可能不是)异步地发送消息。这就是像MSN Messenger这样的聊天程序的工作方式。
这里有一个关于使用WCF进行点对点通信的“简单”教程,链接为peer-to-peer communication using WCF at MSDN
请注意,这并不像听起来那么容易。你可能更喜欢使用Windows的SendMessage来发送消息,链接为just send messages using Windows' SendMessage

非常感谢。应用程序1应该作为服务器,因为有许多类似应用程序2的应用程序,所有应用程序都应按顺序执行。一旦应用程序2被执行,就会从应用程序1调用应用程序3的执行,以此类推。所有应用程序都在同一系统上。请建议实现这一目标的最佳方法。 - Murtaza Badshah
有很多方法可以实现这个目标,最好的方法取决于众多变量,因此无法回答您的问题。请寻求公司架构师或资深开发人员的帮助。 - Roy Dictus

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

===== 编辑 =====

类和接口的名称仅反映了我的想象力不足


0

这只是概念性的实现方法:

您需要实现WCF服务。有许多方法可以完成此任务。其中之一应该是这样的。

App1调用服务方法并告诉它需要执行App2。然后,App1可以等待响应。

App2不时地ping服务以查看是否需要执行。App2完成工作并调用服务方法告诉它已经完成。

当完成时,App1将获得响应。

另一个选项是不实现请求/响应,而是从App1 ping服务以查看App2是否完成了其工作。

有关如何实现WCF服务,请参见:http://wcftutorial.net/WCF-Getting-Started.aspx


非常感谢。应用程序1应该作为服务器,因为有许多类似应用程序2的应用程序需要按顺序执行。一旦应用程序2被执行,就会从应用程序1中调用应用程序3的执行,以此类推。所有应用程序都在同一系统上。请建议实现这一目标的最佳方法。 - Murtaza Badshah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接