我有两个不同的 winform 应用程序,App1 和 app2。App1调用app2的exe(使用DOS命令窗口)并发送消息启动app2。app2 开始执行,一旦完成任务,它就会向 app1 发回执行成功的消息。如何使用 WCF 实现此功能。早些时候,同样的代码是用 foxpro 编写的,这个 finc 是使用内存管理实现的。
3 回答
我认为您想要的是点对点通信,其中 2 个应用程序(可能在或可能不在同一台机器上运行)异步发送彼此消息。这就是 MSN Messenger 等聊天程序的工作方式。
在 MSDN 上有一个关于使用 WCF 进行点对点通信的“简单”教程。
请注意,这并不像听起来那么容易。您可能更喜欢只使用 Windows 的SendMessage
.
基本上:
一方面实例化一个“服务器”
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 {});
}
===== 编辑 =====
类和接口的名称只反映我缺乏想象力
这只是概念上如何实现这一点:
您需要实现 WCF 服务。有很多方法可以完成这项任务。其中之一应该是这样的。
App1 调用 service 方法并告诉 app2 需要执行。App1 可以等待响应。
App2 时不时 ping 服务,看是否需要执行。App2 完成了它的工作并调用服务方法来告诉它已经完成了。
App1 将在完成后得到响应。
其他选项不是实现请求/响应,而是从 App1 ping 服务以查看 App2 是否完成了它的工作。
如何实现 WCF 服务参见,例如:http ://wcftutorial.net/WCF-Getting-Started.aspx