从Web服务体系结构访问数据库

时间:2012-01-23 11:39:43

标签: c# asp.net oracle iis

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

要访问数据库,我使用的DLL具有所有数据库逻辑并返回已完成的对象。 oracle连接是在DLL中创建的,因此数据库服务器,用户和pass在代码中是硬编码的,我知道这可能不行。我的问题是关于在何处创建与数据库的连接,以及如何在外部配置文件中配置server / user / pass参数,但是每次必须连接到数据库时都不要读取它。

现在我有:

ASMX:

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

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

      1. 处理DLL中返回的对象并返回它们。
      2. 我应该在Web方法中创建连接并将这些参数存储在应用程序或会话变量中,而不是在dll方法中创建它们吗?

        感谢您的帮助

1 个答案:

答案 0 :(得分:0)

正如Davide的评论中所建议的那样,如果您没有使用像NHibernate或MS Entity Framework这样的内容,那么最好将Business Logic LayerData Access Layer分开。这些好处都有详细记录,包括关注点的分离,测试以及允许DAL与跨平台/系统无关。

  

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

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

  

我的问题是关于在何处创建与数据库的连接,以及如何在外部配置文件中配置server / user / pass参数,但是每次必须连接到数据库时都不要读取它。

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

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

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

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