【问题标题】:Best way for WinForms client to communicate with remote SQL Server and share data filesWinForms 客户端与远程 SQL Server 通信和共享数据文件的最佳方式
【发布时间】:2012-12-27 06:15:00
【问题描述】:

经过大量 Google 搜索并冒着提出愚蠢问题的风险,我可以寻求帮助。我正在开发一个 C# WinForms 客户端应用程序,使用 ADO.NET 从 Internet 上的 SQL Server 2012 数据库读取/写入数据。同样的应用程序还需要上传/下载数据文件。客户端应用程序只会被少数员工(永远)使用。员工都在不同的地方。数据库只有大约 20 MB。将定期单独访问大约 100 个数据文件,总大小约为 300 MB。 SQL Server 2012 在我们可以完全控制的(非虚拟)Windows Server 2008 R2 机器上运行。客户端应用程序将在 Win-XP 和 Win-7 机器上运行。

优先级是 1. 互联网安全 – 让黑客远离 Windows Server 机器和客户端/服务器通信。 2. 性能。 3. 简单。企业安全性和可扩展性不是问题。此外,如果解决方案复杂,性能也不是那么重要。

两个相关的问题我真的可以使用帮助:

  1. 鉴于上述优先级,与数据库通信的最佳方式是什么?我发现的仅有的两个选项是排他性的; WCF 服务或直接通过 VPN。

  2. 再次考虑到上述优先事项,上传/下载数据文件的最佳方式是什么?我确信使用 VPN、WCF、FTP 有很多选择;但我不知道任何细节。此外,使用 SQL Server 2012 FileTable 看起来很有希望,但我不确定它在 Web 上是如何工作的。备份/恢复以及能够对数据进行全文搜索将是不错的功能,但不是必需的。

我知道什么是 VPN,但从未将其用于这些目的。我知道 PPTP 存在一些安全问题,但我们暂时不会升级 XP 机器。我知道什么是 WCF 服务,但从未编写过。我也不知道在这种情况下 SOAP 或 REST 是否更好。我在 SQL Server 中构建了一个 FileTable,但我不知道如何远程访问数据。我对 C#、ADO.NET 和 SQL Server 有相当的了解。

我意识到这些都是带有主观答案的大问题。尽管如此,我们将不胜感激任何想法或朝着正确方向推进。

【问题讨论】:

  • 我能想到的最好的方法是先做一个GoogleSearch 并搜索如何连接到 Winforms 中的 Sql Server 以及 Web 表单以及 WCF 进行单独搜索并开始代码.. 祝你好运

标签: c# sql-server wcf ado.net vpn


【解决方案1】:

保持简单并使用标准机制。我的建议如下:

  • 构建能够执行所需操作的 WCF 服务。您可以构建 SOAP 或 RESTful 服务。我在这里的一般指导是构建一个 RESTful 服务,因为您正在传输文件,并且这与 REST 集成度更高。使用 SOAP,您需要调整一些设置来传输大文件。
  • 使用 SSL 保护服务,保持简单。 VPN 增加了一层复杂性,很可能在这种情况下不需要。此外,它只会让用户的体验变得不那么友好。
  • 不推荐在 SQL Server 2012 中使用 FileTable 来满足您的需求。您拥有服务器,因此当您发送和接收文件时,处理文件系统会更加直接。
  • 您还可以构建一个简单的表单身份验证过程,为用户创建会话密钥并将其传回。我不确定这是否必要,但如果您需要额外的层,只需将其作为操作之一。然后可以将该会话密钥传递给每个方法并在执行操作之前进行验证。 这是安全的,因为您使用的是 SSL。

Here is a tutorial 将帮助您完成构建 RESTful WCF 服务的过程,而且它是相当新的。

【讨论】:

  • 感谢迈克尔的回复。我们目前正在使用强类型 Ado.Net DataTables 以及 BindingSource。我的理解是,通过 WCF 传递这些对象可能是有问题的、低效的以及糟糕的形式。具体来说,我很难理解如何处理更新。您是否有将这些对象与 WCF 一起使用的经验,或者将这种类型的设计转换为对 WCF 友好的设计?如果它运作良好,那么糟糕的形式对我们来说并不是真正的问题。更改为 WCF 数据服务之类的东西看起来需要做很多工作。
  • @rastro,在来回传递数据时,您将需要构建普通的旧类。您可以轻松地将数据从DataTable 转储到某种类型的List<T> 中。这就是您将数据发回的方式。就更新数据而言,我建议将每个更新作为单个请求发送(例如,以 stringint 等非常原生类型的形式发送您需要的数据)并简单地执行更新。我还将建议您从 DataTable/DataAdapter 转到 Dapper。谷歌它,你会明白为什么。它简单、快速,并且使用普通的旧类。
【解决方案2】:

我的建议是部署 VPN 服务器来提供您正在寻找的安全性。有许多不错的 VPN 服务器可用,Google 搜索应该会提供许多不同价位的选项。

一旦您部署了 VPN 服务器(以及您希望能够访问数据库的不在本地网络上的所有计算机的客户端),您就可以使用 ADO.NET 来访问数据库。 ADO.NET 将在 VPN 后面无缝运行。

根据您的问题,我假设文件存储在数据库外部的文件系统中,并且数据库仅引用文件。如果是这种情况,您可以使用任意数量的选项来下载文件,但 FTP 是经过时间考验且易于实施的解决方案。在您的情况下,还有其他可能会或可能不会更好地工作(请参阅here 了解一些选项)。

【讨论】:

  • 感谢两位的回复。我决定使用 VPN,因为在项目的这个阶段设置 WCP 需要太多的返工。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多