客户端通过Internet访问SQL Server

时间:2009-10-17 17:34:21

标签: c# sql-server wcf web-services data-structures

有没有人对将客户端连接到SQL Server以获取数据的最佳方法有任何意见。

假设我在Winform中有一个不在内部网络上的C#DataGridView,我需要用大量数据加载它。

目前,为了访问数据,我们在客户端调用组件SQLDataAdapter,它打开与SQL服务器的连接,加载DataSet,然后关闭数据库连接。这是使用SQL Server身份验证,并且有许多应用程序同时以相同的方式连接到Internet上运行。

所以我想提高安全性而不是降低性能。我应该研究哪些选项或其他选项?

- 以相同的方式连接,但在应用中的用户时间内保持连接打开。

创建WebServices服务器并将数据集或集合传递给客户端。

- 创建WCF服务器并连接到db。 (LINQ,Identify Framework,ADO.NET ......?)

创建WebServices和WCF服务器,客户端连接到WCF,后者从WSE服务器获取数据,该服务器连接到SQL Server并将集合或数据集传递回客户端

就个人而言,我个人最喜欢最后一个选项。 1.将我们已经构建的组件放到Web服务中会很容易。 2.这将允许我们停止让我们的ASP.NET网站直接访问数据库,但通过Web服务服务器连接(ASMX到ASMX =好吗?)。 3.我们可以更好地控制访问和提供给我们网络之外的数据。我们不再需要在应用程序中保留连接字符串。

是否有人对这些或这些选项的组合有经验?我有点小心翼翼,因为我听到有关像这样的服务器的恐怖故事是直接连接到SQL Server时没有问题的漏斗点。

由于

杰森斯通

-

3 个答案:

答案 0 :(得分:3)

在我看来,您需要一个非常有说服力的理由允许从网络外部直接连接到您的数据库。如果未正确完成,允许远程Sql连接可能会带来很大的安全风险。业界用Sql Slammer病毒等方法学到了很多东西......

Winforms / Wpf客户端应用程序 - > WCF - >数据库在现实世界中运行良好。此外,将数据访问隐藏在远程应用程序的服务后面,只要数据形状来回传递保持不变,就可以在不更改客户端的情况下更改数据库和相关对象。

另一方面,任何必须为来自一个逻辑实例(例如Web应用程序/站点)的大量并发用户提供服务的应用程序都应该直接连接到数据库。

在任何一个实例中,我都没有看到使用另一组Web服务从WCF和Web Apps隐藏数据库的价值,除非我们讨论的是一个巨大的不同的企业系统。

答案 1 :(得分:2)

您是否检查过ADO.NET DataServices(以前的代号为“Astoria”)?

这是一种基于WCF构建的技术,具有WCF的所有优点,允许您相当容易(但有选择地和安全地)公开数据模型(通常是ADO.NET实体框架模型,但是Linq-to-SQL或者其他技术也可以作为互联网的REST服务。

您可以完全控制数据库的哪些部分实际在模型中表示,然后您在模型中具有不同级别的访问权限 - 您可以允许读取集合(例如,读取所有产品的列表),或者只是阅读单个项目,甚至更新,插入或删除等内容 - 均由您控制。

使用REST界面,使用它只需浏览到给定的URL,然后在该模型中向下钻取或链接。

还有一个客户端API可供使用,因此您可以轻松快速地显示数据并在数据中提供用户导航。你一定要和Mike Flasko一起查看Developing Applications Using Data Services上的PDC08谈话,然后和Pablo Castro一起查看Offline-Enabled Data Services and Desktop Applications

绝对是一个好主意,以及一种快速而安全的方式将您的数据传输到互联网上!看看吧。

马克

答案 2 :(得分:1)

@Auger说,加上,通过HTTPS获取SSL证书和服务器。这样它的安全性和IIS处理的水平很低,因此您知道自己获得了最佳性能。