WCF架构:使用回调,事件,2x服务客户端?

时间:2011-02-23 13:21:09

标签: architecture wcf wcf-client performance

我在LAN服务器上安装了我的主应用程序(ServerApp)(位于防火墙后面,因此服务器可以访问互联网但无法直接从互联网访问(无静态IP)),以及我的PC上的监控应用程序(MonitorApp)位于局域网外部并直接连接到Internet。

ServerApp应及时向MonitorApp发送一些通知事件(基本上是一些统计信息)(每1-2秒)。

性能是此应用程序的关键因素,因此我必须尽一切可能减少流量。

  • 如何在这两个应用程序之间建立连接?我可以在这种情况下使用WCF回调吗? (考虑到我无法直接从MonitorApp)看到服务器。
  • 在使用一方的WCF服务和客户端以及另一方使用另一方的WCF服务和客户端而不是WCF回调合同时是否存在性能偏好。有一件事我猜是我必须双方都使用2x客户端服务,因为我必须使用基本的HttpBinding来通过防火墙。
  • 有关如何实施的一般指导原则?
  • 如果我打算编写像MonitorApp这样的应用程序,但也能够向ServerApp发送命令(为了澄清,我们将其命名为ControlApp),我应该使用其他方法吗?

为多个问题道歉。谢谢你。

1 个答案:

答案 0 :(得分:1)

看起来很难实现解决方案。

  

我安装了我的主应用程序   (ServerApp)在LAN服务器上(即   在防火墙后面,所以服务器可以   访问互联网但它不可能   直接从互联网访问(没有   静态IP))

基于此,应该清楚服务器无法托管服务,因为您无法从LAN外部访问它。因此,除非您的ServerApp连接到MonitorApp中托管的服务或者在防火墙上配置了某些端口转发,否则将无法实现这一点。

对我来说,正确的设计是ServiceApp托管一个服务,它可以提供监控数据和第二个服务来发布命令。在您的方案中,这是不可能的。您可以通过在MonitorApp中托管服务来部分解决监控问题:

您可以公开服务合同,例如

[ServiceContract]
public interface MonitoringAppContract
{
  [OperationContract(IsOneWay=true)]
  void SendMonitoringData(MonitoringData data);
}

ServerApp将定期调用此操作并将监视数据传递给MonitorApp。由于单向调用,它不会被MonitorApp上的数据处理阻止,但也不会通知异常。这里的问题是MonitorApp上公开的WCF服务必须可用,否则ServerApp将等待Open timeout。

双工通信也不是解决方案,因为ServerApp必须再次建立连接 - 再次出现超时问题,而且双工通信是会话性的,需要关注不活动超时等。

您的问题可以通过Azure服务提供的中继轻松解决,但您必须为此付费。