gpt4 book ai didi

c# - 从 Web 服务架构访问数据库

转载 作者:行者123 更新时间:2023-11-30 18:40:01 26 4
gpt4 key购买 nike

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

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

现在我有:

ASMX:

  1. 包含网络方法
  2. 验证请求参数
  3. 调用动态链接库方法

动态链接库:

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

AMSX:

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

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

谢谢你的帮助

最佳答案

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

1.creates the database connection (hardcoded constants for the database server/user/password)

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

My question is about where to create the connection to the database, and how to configure the server/user/pass parameters in an external configuration file but not to be reading it each time I have to connect to the database.

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

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

Should I create the connection in the web methods and store those parameters in a application or session variable, instead of creating them in the dll methods?

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

关于c# - 从 Web 服务架构访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8971029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com