【问题标题】:Database access in a web serviceWeb 服务中的数据库访问
【发布时间】:2010-10-12 19:56:14
【问题描述】:

我目前正在为组合的网络/桌面应用程序(即从不同来源访问)进行网络服务实施。

现在有两个问题我真的找不到答案:

  1. 如何以正确的方式访问数据库(静态类?单例?DI?)?我没有找到任何关于在 DI 容器中使用 Web 服务来帮助访问数据库的信息。

  2. 写权限呢?这是提供写入数据库的可能性的正确方法吗?当然,请求会受到用户 ID 和密钥的保护。

注意:这不是 wcf,而是普通的 Web 服务(即 asmx 文件扩展名)。

【问题讨论】:

  • 实际上,WCF “普通”Web 服务——ASMX 现在被 Microsoft 视为“遗留技术”。
  • 是的,我知道这一点,但是 Mono 上 WCF 的已知问题列表非常庞大。
  • 我投票支持 ASMX 为“正常”,原因与手动换档变速器被称为“标准”的原因相同。
  • @Musi - 然而,手动变速器比自动变速器更难学习。考虑到这一点,WCF 不应该被视为“标准”吗? ;)
  • @mikemanne:我承认这不是一个完美的类比,但我仍然认为 ASMX 是“标准的”,因为它首先存在(就像标准传输一样)。 WCF 是“自动的”,因为它是较新的发明,尽管它比 ASMX 更难实现。

标签: c# .net web-services mono asmx


【解决方案1】:

从 Web 服务访问数据库有许多“正确”的方法。就个人而言,我经常在一个静态类(或者更准确地说,一个具有一堆静态方法的类)中使用 ADO.NET,该类通常返回一个 DataTable(包装在一个 DataSet 中,可以序列化,因此很容易从 Web 服务返回) )。您也可以使用 ORM(如 NHibernate),尽管它们总是比 ADO.NET 具有更大的开销,因此是服务器负载问题的潜在来源。

没有特别的理由不允许从您的网络服务对您的数据库进行写访问。如果您的应用程序设计需要写入数据库(显然这是一个非常常见的要求),那么从 Web 服务中执行此操作就非常好。

【讨论】:

  • 如何解决并发写访问?只在 ado.net 中使用事务?
  • 并发写入在 ADO.NET 中并不是一个特别的问题。您可能会遇到后续用户覆盖前一个用户数据的情况,但这不是 ADO.NET 或 Web 服务特有的问题。
  • 我同意 Musi 的观点:只要您对“最后胜出”功能没问题,并发写入应该不是问题。但是,如果您的要求是“最后胜出”会产生问题,那么您将需要研究乐观锁定或悲观锁定的技术。无论您实施哪种锁定方案,它都将比简单的最后获胜方法更复杂。
  • @mikemanne:我的观点是并发问题与数据库访问是通过 Web 服务完成这一事实没有直接关系。
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
相关资源
最近更新 更多