2010-10-12 49 views
2

我目前正在开发一个Web服务实现到一个组合的Web /桌面应用程序(即来自不同来源的访问)。在Web服务中的数据库访问

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

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

  2. 写入访问权限如何?这是提供写入数据库的可能性的正确方法吗?当然,这些请求将被用户ID和密钥保护。

注意:这不是wcf,而是正常的web服务(即asmx文件扩展名)。

+1

实际上,WCF是“普通”网络服务 - ASMX现在被认为是微软的“传统技术”。 – 2010-10-12 20:23:00

+0

是的,我意识到这一点,但单声道WCF的已知问题清单是巨大的。 – Femaref 2010-10-12 20:46:48

+1

我投ASMX为“正常”,原因与手动换档变速器称为“标准”相同。 – MusiGenesis 2010-10-12 20:51:55

回答

1

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

没有特别的理由不允许从您的Web服务对您的数据库进行写入访问。如果您的应用程序设计需要写入数据库(显然是一个相当常见的要求),那么从Web服务完成这一切完全没问题。

+0

你如何解决并发写入访问?只需在ado.net中使用交易? – Femaref 2010-10-12 20:47:42

+0

并发写入在ADO.NET中不是特别的问题。您可能会遇到后续用户覆盖先前用户数据的情况,但这不是ADO.NET或Web服务特有的问题。 – MusiGenesis 2010-10-12 20:57:16

+0

我同意Musi:只要你对“最后获胜”功能确定,并发写入应该不成问题。然而,如果你的要求是“最后一击”会有问题,那么你需要研究乐观锁定或悲观锁定的技巧。无论您实施哪种锁定方案,它都会比简单的最后赢得方法更复杂。 – mikemanne 2010-10-13 16:53:37