我已经研究了一段时间,实际上已经为一些ASP.NET 2.0网站创建了一个原型ASP.NET Web服务作为DAL。只是想向那些成功推出DAL作为Web服务的更有经验的开发人员寻求一些见解/建议。将DAL部署为Web服务有哪些缺点/风险?保护或验证此Web服务消费的最佳方法是什么? WCF是不可能的,我将在VS 2005中进行编码。
谢谢。
答案 0 :(得分:15)
让我们从“企业”软件开发项目的演变角度来看这个:
为了再次认真,上面的故事有助于建立Web服务的上下文并理解它们要解决的问题。从这个上下文我们可以看出,Web服务确实包含数据层和业务层。服务层的目的是强制在多个应用程序之间共享一组通用规则。将业务层从服务中剔除,使程序员有机会为每个应用程序编写自己的业务代码,这对于首先使用服务的目的而言恰恰相反。
也就是说,有可能最终堆叠在一起,你拥有对业务的某些部分私有的原始数据服务,而那些“原始”服务又用于构建下游服务,包含业务规则层。很难确定业务究竟在做什么。但是,我觉得这种断开程度不太常见。
答案 1 :(得分:4)
我认为,这种方法的最大缺点是调用Web服务的额外开销。如果您需要频繁查询/更新DAL,这可能会非常缓慢。
我的观点是,这种方法过度工程化,除非你真的需要为不同的消费者提供物理上独立的DAL,并且你需要在DAL中进行一些额外的验证/处理(无论如何这都是错误的)。
保护可以非常简单。您可以将SSL与IIS身份验证一起用于公共服务接口。
所以,那些是我的0.03美元
答案 2 :(得分:4)
我通过基于ASMX的Web服务公开数据所面临的唯一真正挑战是梦想有效获取数据所需的所有方法。有时很难有纪律来兑现应用程序和数据库之间的层。
如果要使用AD部署到Intranet环境,则集成Windows身份验证是控制谁可以与服务进行交互的绝佳方式。按消费者角色对服务类进行分组是有帮助的,因此permissions can be controlled declaratively in the Web.config。我倾向于将读取方法保留在与插入更新和删除方法不同的服务类中
避免繁琐的服务电话。当然,在2层系统中避免繁琐的数据库调用是很好的,但是当你增加层数时,你会为吹嘘的电话付费。选择发送更大的对象。例如,如果您有一个包含少量查找的表,则使用预先查找的值通过线路发送对象通常可以节省您的第二次或第三次调用,并且不应该对系统造成不必要的负担。
我希望这些想法有所帮助。
答案 3 :(得分:3)
我建议不要这样做,直到你可以转到WCF。否则,您将通过HTTP在基于文本的XML中来回传递所有数据,这将大大减慢速度。您对安全性的选择也很少,仅限SSL加密。
WCF将允许您通过TCP / IP,命名管道或消息队列发送二进制数据,并且在安全性方面将为您提供极大的灵活性。