C# web服务中的数据库访问

C# web服务中的数据库访问,c#,.net,web-services,mono,asmx,C#,.net,Web Services,Mono,Asmx,我目前正在为一个组合的web/桌面应用程序(即从不同来源访问)进行web服务实现 现在有两个问题我真的找不到答案: 我如何以正确的方式访问数据库(静态类?单例?DI?)?我并没有找到任何关于在DI容器中使用Web服务来帮助访问数据库的信息 写访问权限呢?这是提供写入数据库可能性的正确方法吗?当然,请求将受到用户ID和密钥的保护 注意:这不是wcf,而是普通的web服务(即asmx文件扩展名)。从web服务访问数据库有许多“正确”的方法。就我个人而言,我经常在一个静态类(或者更准确地说,是一个包含

我目前正在为一个组合的web/桌面应用程序(即从不同来源访问)进行web服务实现

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

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

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

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

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


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

    实际上,WCF是“正常”的web服务-ASMX现在被Microsoft视为“遗留技术”。是的,我知道,但是Mono上WCF的已知问题列表是巨大的。我投票支持ASMX为“正常”,原因与手动换档变速器被称为“标准”的原因相同。@Musi-然而,手动换档变速器比自动换档变速器更难学习。考虑到这一点,WCF不应该被视为“标准”吗@米克曼:我承认这不是一个完美的类比,但我仍然认为ASMX是“标准”的,因为它是第一个出现的(就像标准传输一样)。WCF是“自动的”,因为它是一项较新的发明,尽管它比ASMX更难实现。如何解决并发写入访问?仅在ado.net中使用事务?并发写入在ado.net中不是一个特别的问题。您可能会遇到后续用户覆盖前一个用户的数据的情况,但这不是ADO.NET或web服务特有的问题。我同意Musi:只要您对“最后一个wins”功能满意,并发写入就不应该是问题。然而,如果您的需求是“最后的胜利”会有问题,那么您需要研究乐观锁定或悲观锁定的技术。无论您实施哪种锁定方案,它都比简单的后进先出的wins方法更复杂。@Mikemane:我的观点是,并发性问题与数据库访问是从web服务完成这一事实没有直接关系。