【发布时间】:2015-05-12 10:52:32
【问题描述】:
我正在为我们的组织开发一个程序。我的程序(Windows 7 上的 C# 桌面程序)由 2 个子程序组成:一个“服务器”程序和一个“客户端”程序。
“服务器”程序将安装在总部,并从分支机构接收有关每个员工接受过培训的人员和科目的信息。它有一个 PostgreSQL 数据库后端。
“客户”程序将安装在组织的分支机构(目前有 9 个分支机构)中,它将有一个基于文件的数据库(尚未确定),并负责收集有关谁在该特定分支机构接受培训的信息,以及主题。
因此,每天(给予或接受)每个分支机构都会将培训统计数据发送到总公司的服务器程序(?序列化对象),总公司将接收对象并将它们存储在数据库中并回复一些信息,诸如“好的确认”或“是的,你可以这样做”或“不,拒绝”之类的东西。月底,总部计算机将处理数据并打印一些统计数据。所以分支和服务器之间的实时通信是绝对没有必要的。
问题:鉴于这些计算机通过 Internet 并且无法直接相互通信(我们在我国有动态 IP 地址),我如何从客户端获取这些序列化对象到服务器,反之亦然?
我的想法是,我可以使用电子邮件(将文件作为附件发送)或者在任何云文件共享程序(Dropbox 或 OneDrive...等)上。但我不是专业的程序员,我想知道这些事情是如何完成的。
ps:云数据库不是一个选项。出于性能原因 + 我不希望我们的信息掌握在其他人手中。一种通信方式是可以的,因为东西会在传输过程中被签名和加密。
【问题讨论】:
-
他们为什么不能直接交流?你只关心请求-响应通信,这很容易。只需设置一个加密的 WCF 端点,最好使用非常严格的防火墙(IP 过滤?),然后就完成了。
-
假设这些计算机通过 Internet 并且显然无法直接相互通信 Internet 上的计算机始终直接通信,如果你不能,你需要告诉我们原因,因为那样它们之间就必须有一个互联网代理或某种缓冲服务器。
-
我们在我们的国家拥有动态IP。当然还有我们路由器中的 NAT。
标签: c# networking serialization communication