5

我正在构建一个将在本地网络上使用的桌面应用程序,其中 SQL Server 作为数据库。

该应用程序将同时拥有大约 50 个用户。在什么特定情况下我需要使用 WCF 服务?是否建议在数据库所在的服务器计算机上创建 WCF 服务,所以我们通过 WCF 服务连接到该服务器,而不是直接连接到数据库?连接到 SQL Server 数据的推荐方法是什么?为什么?

编辑:让我更详细地解释一下。我以前使用过 WCF Ria 服务,所以我知道它们是如何工作的。让我们假设 WCF 服务以相同的方式工作。问题是针对为什么我们要使用 WCF 而不是直接连接到数据库?我不想指定我当前的申请要求,因为我会得到特定要求的具体答案。我的目标是大致了解您为什么以及何时会选择一个而不是另一个。到目前为止,我收到了令人满意的答案。

在我看来,普遍的共识是只有在需要另一种类型的应用程序时才使用 WCF,该应用程序将使用 Web 访问从服务中获取数据。另外,如果我理解正确,从安全的角度来看,两者之间没有区别。

将来会有一个统计应用程序使用 Web 向用户提供只读统计信息,自然需要一些服务来完成这项任务(应用程序没有特定的客户,它将提供给很多客户)。由于我需要为特定客户端快速完成一些演示应用程序,因此我正在考虑忽略服务部分,并进行适当的分层(WPF->VM->Model->EF,所以稍后我将在之间插入服务模型和 EF。我想用插入层运行 WPF 应用程序不应该花费太多时间。我也推迟了服务,因为下一个原因:因为 HTML5 是(将成为)Web 的主要技术,并且有SL 有可能被放弃作为技术(我一直在使用),合乎逻辑的决定是选择 HTML5 而不是 SL。

4

3 回答 3

3

我认为考虑这个问题的更好方法是您是否应该使用服务接口从应用程序中抽象出数据库和数据访问层。您可以使用 WCF 和 SOAP,也可以使用基于 REST 的 HTTP 服务,技术的选择是次要的,取决于您的应用程序的当前或未来需求是否表明需要额外的抽象层。

您可能考虑使用服务接口而不是直接连接到 SQL 数据库的原因包括但不限于:

  • 易于支持多个操作系统/客户端 UI
  • 能够独立于数据库模式发展数据/服务接口
  • 将应用程序与数据库架构或位置的更改隔离开来(您不必将更改重新部署到应用程序,只需更改它正在调用的服务的内部结构)
  • 如果数据可以被其他系统使用,那么您有一种标准方法可以允许这些系统与您的应用程序正在管理的数据进行交互
  • 减少 SQL 数据库连接安全问题(仅服务身份连接数据库,允许您在客户端使用多种身份验证/授权策略)

您正在考虑的权衡是实现服务接口的时间/成本/复杂性与您将获得的灵活性和可维护性优势。在决定是使用 ADO.NET 直接连接到数据存储还是使用服务层之前,您应该评估应用程序和客户的需求。

您应该查看 Microsoft服务层指南,因为它们涵盖了许多需要考虑的因素。

于 2012-04-19T21:30:40.443 回答
2

除非您需要创建可重用的服务,否则我想不出添加 WCF 层的理由,除非您只是在寻找这样做的理由。我认为您可以使用某种 ORM(例如 EF 或 nHibernate)并感到高兴。

于 2012-04-19T18:00:41.303 回答
1

WCF 的主要原因是安全性。如果客户端直接连接到数据库,则必须授予客户端对表的权限。客户端可以侵入连接并直接使用 TSQL。您必须在单层应用程序中向网络公开端口 1433。使用 WCF,客户端无法直接访问 SQL。它不仅总体上更安全,而且您可以拥有更细粒度的安全性。.NET 服务代码可以强制执行行级安全性。表仅具有列级安全性。如果这是在专用网络上进行的业务,并且您不希望有人会尝试入侵您的数据库,那么直接连接到 SQL 服务器的客户端更容易构建。对于服务器端服务,另一个因素是对服务器端代码的更改是一个地方,因此您不必更新 50 台设备。

于 2012-04-19T18:55:22.230 回答