【问题标题】:Access to database from web service architecture从 Web 服务架构访问数据库
【发布时间】:2012-01-23 11:39:43
【问题描述】:

我有一个连接到 Oracle 数据库的 Web 服务 (ASMX),但我认为我的架构不合适。

为了访问数据库,我使用了一个包含所有数据库逻辑并返回完整对象的 DLL。 oracle 连接是在 DLL 中创建的,因此数据库服务器、用户和密码是硬编码在代码中的,我知道这是不可能的。我的问题是关于在哪里创建与数据库的连接,以及如何在外部配置文件中配置服务器/用户/传递参数,但每次我必须连接到数据库时都不要读取它。

现在我有:

ASMX:

  1. 包含网络方法
  2. 验证请求参数
  3. 调用 DLL 方法

DLL:

  1. 创建数据库连接(数据库服务器/用户/密码的硬编码常量)
  2. 从数据库中选择数据
  3. 使用该数据创建一些对象
  4. 关闭连接。
  5. 返回那些对象

AMSX:

  1. 处理从 DLL 返回的对象并返回它们。

我应该在 Web 方法中创建连接并将这些参数存储在应用程序或会话变量中,而不是在 dll 方法中创建它们吗?

感谢您的帮助

【问题讨论】:

  • 将所有内容与连接和 DataAccessLayer 隔离开来,请在此处查看我的答案:stackoverflow.com/a/7474357/559144 您应该在 ClassLibrary (DAL) 中有一些类,它们创建连接并使用 EF 或 ADO.NET 或其他数据访问技术,不要共享它或将其暴露给其他层。从 Web 服务 ASMX 或 WCF 中,您将创建业务逻辑类的实例,该实例将创建 DAL 类的实例并使用它们的方法,而无需显式打开连接。

标签: c# asp.net oracle iis


【解决方案1】:

正如 Davide 在评论中所建议的那样,如果您不使用 NHibernate 或 MS Entity Framework 之类的东西,那么将Business Logic LayerData Access Layer 分开可以说是最佳实践。好处有据可查,包括关注点分离、测试和允许 DAL 跨平台/系统无关。

1.创建数据库连接(数据库服务器/用户/密码的硬编码常量)

这是一种非常糟糕的做法,可能会导致各种各样的安全和部署问题。

我的问题是关于在哪里创建与数据库的连接,以及如何在外部配置文件中配置服务器/用户/传递参数,但不是每次我必须连接到数据库时都读取它。

将数据库连接字符串存储在 App.config 或 Web.Config 文件的 ConnectionString section 中的最佳和最方便的位置,如果您创建一个静态属性以从配置文件中公开连接字符串,那么您不需要每次都需要读取配置设置。

private static readonly string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

我应该在 Web 方法中创建连接并将这些参数存储在应用程序或会话变量中,而不是在 dll 方法中创建它们吗?

简短的回答是否定的,您为 Web 服务公开的 API 应该只做它的设计用途,从数据访问层公开底层业务对象。

【讨论】:

  • 另外使用像 NH 或 EF 这样的 ORM,你应该分离和隔离数据库访问技术和逻辑 ;-)
猜你喜欢
  • 2019-11-11
  • 2014-04-19
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多