2

我需要从服务器读取一些数据,通过 Internet 传输(无 VPN),然后将其写入另一台服务器的磁盘。我本可以想到很多选择,但最后我实现了:

  1. 作为 Windows 服务的发送方,每 X 分钟发送一次新数据
  2. 接收器作为 WCF 自托管服务,带有 WSHttpBinding。
  3. 以字符串形式传输的数据,即序列化为 XML 的对象

但是在我这样做之后,我意识到有很多方法可以做到这一点:

  1. 其他协议,如 FTP。
  2. http://msdn.microsoft.com/en-us/library/ms731092.aspx中列出的其他绑定
  3. 其他参数类型,例如原始对象类型。

我想知道这些选项中的任何一个是否会导致更快、更可靠或更安全的传输。你会推荐什么?

4

6 回答 6

2

如果可能的话,SFTP(SSH 文件传输协议)会得到我的投票。

几乎通过 SSH 连接建立隧道 FTP。

...您还可以尝试创建符合基于消息的安全性的 WS-Security 策略的 Web 服务(取决于您使用的模型,您的消息使用从用户名/密码对到 X.509 证书的任何内容进行加密)。

当现成的包/协议可以工作并且完全符合您的目的时,这似乎需要大量的工作来构建定制的东西。

于 2009-07-24T14:27:48.477 回答
1

我使用谷歌协议缓冲区。为它编写一个套接字层很简单。

它非常紧凑、多语言、快速,最重要的是,添加数据字段很简单,不会破坏兼容性。

查看Marc Gravell编写的protobuf-net,他是 Stack Overflow 的常客。

于 2009-07-24T15:23:16.247 回答
1

在安全性方面,您可以利用System.Security.Cryptography.CryptoStream在您通过网络传递数据时提供一层加密。

于 2009-07-24T14:31:19.233 回答
1

发件人非常开放 - 几乎任何选择都会很好。

对于接收器,要考虑的一个选项是 HttpHandler —— 只是 ASP.NET 项目中的 ashx 文件。您可以使用任何您想向接收者提供选项/信息的自定义 http 标头,然后数据就是 HTTP 请求的有效负载。您不需要通过文本编码来增加数据的大小,HTTPS 内置了安全性。这非常简单。

唯一的缺点是,如果您想实现某种“断开的连接,从我离开的地方继续功能”,这仍然是可能的,但有点困难——使用专门的定制服务可能会更容易。

于 2009-07-24T14:36:06.933 回答
1

基于您只想每分钟传输 1MB 的事实,不需要安全性,并且由于您说双方都在运行 Windows,所以我只需使用 WCF 和 netTcpBinding。这将通过 TCP/IP 以二进制形式发送数据。

没有 SOAP,没有 XML,没有 HTTP 开销。

于 2009-07-24T16:50:21.317 回答
0

如果您使用的是 Windows 服务器,您还可以使用MSMQ并获得消息传递保证、事务、可靠性和一大堆其他功能。它公开了 HTTP 端点,并且很容易从.NET访问和使用

于 2009-07-24T15:40:49.557 回答