2012-01-27 91 views
0

我的问题是关于一个应用程序,它将使用数据库服务器所在的主机应用程序,以及一些将向主机发送信息的客户机。关于.Net中客户端主机应用程序的建议

基本上,主机应用程序从客户端接收一些数据,进行一些计算和错误检查,然后(如果一切顺利)将信息存储在数据库中。接收到的数据可以很容易地序列化,或者将字符分隔成少于50个字符的字符串。

我知道我在开发这个通信应用的基本选项是WCF和之前它已经工作,但我对这种特殊情况下担忧的事实是:

  1. 主机和在大部分时间将客户端通过无线USB调制解调器连接到互联网,我们都知道它们不提供最可靠的连接。

  2. 会有很多客户端同时向主机发送信息,每个客户端都有自己的标识ID,因为它决定了接收的数据的类型以及它代表的内容。

  3. 由于不太可靠的连接,我希望能够知道数据包是否已成功发送,并且如果不能在通信完成之前继续尝试。

  4. 每隔几分钟就会从每个客户端发送新数据,如果让我们说连接失败了5分钟,我希望能够在连接恢复时发送所有未发送的信息。

  5. 最后我很想知道如何能够知道在哪里联系主机,因为USB调制解调器没有静态IP,这可能会不时变化。

我的想法是要么试图建立通过WCF服务,其中客户会直接发送的所有信息到主机或可能考虑以XML格式序列化从客户端的数据通信,然后将它们上传于3日服务器将一直可用,然后每隔一分钟使用主机应用程序尝试将可用信息与第三台服务器中的可用信息进行同步。

希望我在这篇冗长的文章中明确表达了我想要完成的内容,并且非常感谢您对这样一个项目的想法。

+4

投票结束:这不是一个论坛。 – 2012-01-27 20:55:55

+0

@JohnSaunders你能提供一个答案,那么最好的方法是什么? – Kypros 2012-01-27 21:17:50

+0

最好的方法是做什么?讨论一下?讨论的最佳方式是在别的地方。请参阅[faq]。 – 2012-01-27 21:19:15

回答

3

而不是开始讨论。我试着给你一个答案。

我已经实现了一个系统描述。基于这一经验,我可以告诉你,你将会希望看到一个基于消息的系统来完成你的客户和主机之间的通信。

基于消息的系统允许您透明地处理正在进行的通信。它允许您重新发送消息,以防它传输失败。

为了保持它的简洁,有各种基于消息的框架可用于.Net社区。仅举几例:NServiceBus,Mass Transit,Rhino Service Bus,或者更轻量级的Agatha RRSL。

要点是,有不少。它取决于你研究,并找出最适合你的需求。

+0

感谢您的快速响应。你认为中介服务器会是一个很好的解决方案吗? – Kypros 2012-01-27 21:26:07

+0

你为什么认为你需要一个中介服务器?根据我的经验,沟通路径中的“连锁”越少越好。但是,这些USB调制解调器外部IP(如果即时读取它正确)可以改变的事实可能会造成问题。您的客户端只需重新连接到主机,但服务器尚未发送的任何消息将不得不在新连接上发回。所以你需要每个客户端的某种独特的ID。但这是这类问题的标准范例。 – Danthar 2012-01-27 21:45:39

+1

我会先验证你是否有外部地址。我所知道的所有无线互联网提供商在出路时都会提供内部地址和NAT。特别是(!)无线电话供应商(由于UMTS和现在的LTE技术,这一领域的市场份额越来越大)。这基本上会说“外部服务器”,因为你无法接触到开始。 – TomTom 2012-01-27 21:55:37

相关问题