最佳实践:直接SQL访问与Web服务

时间:2009-07-06 11:41:54

标签: c# sql web-services

对于同时具有网络和桌面客户端版本的应用程序:

  1. 桌面客户端需要访问SQL Server的最佳做法是什么?
  2. 从应用程序连接到数据库与使用Web服务有什么好处?
  3. 哪一个提供更好的安全性?
  4. 什么类型的范围将要求一个与另一个(企业内部网与Web应用程序等)
  5. 在平台上选择时还有其他必要的注意事项吗?

6 个答案:

答案 0 :(得分:16)

一般的经验法则如下:

  1. 编写一个与数据库通信的独立数据访问程序集。
  2. 如果您正在寻找不同平台/客户端之间的互操作性,那么将此程序集公开为SOAP Web服务。
  3. 如果您正在寻找性能,请直接在客户端.NET应用程序中使用程序集。

答案 1 :(得分:15)

  

桌面客户端需要访问SQL Server的最佳做法是什么?

如果您使用的是本地SQL Server,则直接访问数据库。如果客户端必须在另一个系统上使用SQL数据库,则首选使用Web服务以获得额外的保护,并且具有应该能够处理多个用户的业务层的附加优势。

  

从应用程序连接到数据库与使用Web服务有什么好处?

通过Web服务连接总是会慢一点,对数据库的修改将更难以添加到整个系统。 (基本上,这意味着您需要创建更新版本的Web服务,同时维护旧版Web服务以实现向后兼容性。)

  

哪一个提供更好的安全性?

Web服务的使用往往更安全,尽管安全性通常比软件问题更像问题。但是,通过用户和数据库之间的Web服务,与数据库的连接更安全,因为用户无法直接访问它。 (除了您通过Web服务提供的功能。)当客户端和数据库位于同一系统上时,这一点没有实际意义,因为用户可以获得完全访问权限。

  

什么类型的范围将要求一个与另一个(企业内部网与Web应用程序等)

Web服务更适用于客户端 - 服务器应用程序,用户不应直接访问数据库。否则,直接数据库连接只会提高性能。 在创建Web服务时,首先编写一个通用(类)库,它将为Web服务提供功能。围绕此(业务)库创建Web服务,将重要方法暴露给外部世界。任何网站都可以直接调用此库而无需使用Web服务,但您始终可以选择让网站代码通过Web服务访问数据。 即使您只使用本地数据库创建一个桌面应用程序,编写一个带有逻辑的业务库来访问数据库也是一件非常好的事情。您的客户可以直接或通过Web服务调用此业务库,具体取决于您的需求。

  

在平台上选择时是否还需要其他考虑因素?

主要是您愿意用来设置的硬件数量。如果您能够设置数据库服务器,为服务设置单独的Web服务,为您的网站设置第三个服务,使用十几个客户端系统,那么您可以选择最分层的版本,其中包括客户端和网站调用调用数据库的Web服务。但如果一切都需要在一个系统上运行,那么只需坚持使用应用程序和业务层/库。

但是,从单个用户的角度来看,添加图层会降低性能。但是,使用多个层可以提高整体性能,因为资源在多个用户之间得到更好的划分。

答案 2 :(得分:7)

我会保持简单并尽可能减少图层数量。层会降低性能,引入复杂性,并且需要在更多位置进行更改。

因此,如果应用程序和Sql Server之间的netwerk连接打开(通常是tcp端口1433),我将使用Sql连接。

答案 3 :(得分:3)

如果您可以从桌面访问数据库,那么您应该这样做。

您有多种客户端。这意味着您的应用程序应具有多个层。 这并不意味着你需要多层。

如果您的图层必须通过防火墙传输数据或者您拥有不同的技术,则可能需要多个层。

答案 4 :(得分:3)

鉴于上下文,客户端访问数据库可能存在很大的安全问题。它要么允许用户访问数据库,要么创建服务帐户。让用户直接访问数据库会带来风险。这两种方法都打开了大门,利用桌面dll连接到应用程序上下文之外的数据库(多次我看到有一个所有功能操作都使用的公共数据访问类的情况。当然,这些组件初始化所有连接信息基于反射的访问使得很容易获得受保护的或私有的方法,除非你声明安全权限。)

Web服务公开不公开任何基于sql的操作的功能操作。这不仅更安全,而且还可以将您的客户从数据存储实施中抽象出来。

同样,这取决于您的背景。但在Enterprise / ISV领域,它通常是一个很大的禁忌。

答案 5 :(得分:0)

我做杂种。以有限的用户直接数据库访问权限,这些用户只能从表中执行只读操作。具有高特权数据库用户并且可以执行写功能的Web服务。业务规则内置在Web服务中(审计试用,权限检查等)

直接的数据库访问使我更容易开发报告,从客户端应用程序访问查找值。