gpt4 book ai didi

c# - WCF Rest服务与存储库模式一起使用?

转载 作者:行者123 更新时间:2023-11-30 13:42:38 25 4
gpt4 key购买 nike

我正在考虑将我的服务层和数据层(存储库模式)移到WCF Rest服务。

因此,基本上我将在本地安装我的软件(WPF客户端),该软件将调用通过Rest Service存在的服务层...然后,服务层也将使用WCF Rest Service调用我的数据层,或者仅通过DLL组装

我希望了解性能如何。目前,我通过PC上的DLL程序集在本地安装了数据层和服务层。

我也认为WCF REST服务将不支持方法重载,但名称相同但签名不同?

我真的很感谢任何人都可以提供任何反馈。

谢谢

最佳答案

如果您想要的只是作为Web服务公开的CRUD薄层(无需VPN等即可提供数据库访问权限),那么您可以使用WCF Data Services来完成相同的工作,而无需付出很多努力,并且可以做很多事情更灵活(例如,您可以针对代理编写Linq)。

您所说的服务层应该公开域对象,因此,假设您有一个域模型,并且想使用WCF Web服务(REST或其他方式)公开此对象,则对问题的答案是:


WCF非常快。这显然不是透明的,但是根据经验,如果您通过网络连接连接到服务,那么您遇到的任何“缓慢”都将归因于网络本身的延迟/带宽限制。唯一的例外是WCF客户端(即通道)的建立时间-这就是为什么您通常希望尽可能长地保持它们的活动,它们不是像DataContext这样的可丢弃对象。
线上不支持方法重载。您可以在服务程序集中重载方法,并通过OperationContract属性(特别是Name属性)对它们进行区分,但是对于外部客户端,它们似乎是具有不同名称的不同Web方法。
但是,如果您要设计Web服务,甚至是REST服务,则要做的第一件事就是将您的观点从基于RPC(“功能”)的思维方式转变为基于文档(“消息”)的思维方式。换句话说,您应该定义一个“请求”类,以将所有这四个参数作为属性公开,而不是让4个方法采用4个可能参数的不同组合。对于“本地”代码,这通常被认为是不好的设计,但是对于Web服务却是好的设计。
同样,使用Web服务公开“存储库”通常被认为是一种反模式(WCF数据服务除外,其用途非常不同)。原因是Web服务应该提供业务逻辑(我认为这是您的服务层所做的事情)。它应该提供非常粗粒度的操作,即原子事务,其中客户端提供同时执行一个完整事务所需的所有信息,而不是连续调用几种方法。

换句话说,如果您发现在尝试将服务转换为Web服务时,有必要对几个不同的服务调用多个操作以执行单个“工作单元”,那么您应该考虑重新设计服务以提供更好的工作抽象。总体设计应最大程度地减少客户端和服务之间的“混乱”。


因此,总而言之,除非您需要解决提供服务这一非常具体的问题,否则在客户端上拥有一个“服务层”并与作为Web服务公开的“数据层”进行对话对您来说几乎没有任何意义。通过WAN进行CRUD操作。从体系结构的角度来看,更有意义的是通过WCF公开实际的服务,并转向更多的瘦客户端应用程序。

但是请记住,沿“ SOA”路线走下去虽然可能会带来许多长期利益,但可能会造成一些短期痛苦。您基本上需要维护另一个库,要测试的另一个库,另一个故障点,以及需要记录的其他内容。如果您没有大型的分布式体系结构,或者在不久的将来没有计划,那么现在开始整合顶部提到的WCF数据服务框架之外的WCF服务可能还为时过早。

另外,您没有指定要开发的域或应用程序的类型,但是REST作为一种特定的服务模型会在安全性,分布式事务等方面进行很多折衷。如果这些服务是针对内部的,或B2B消费-即如果它们是“企业”服务-您确实应该考虑使用SOAP,它使您可以访问WS-Security,Active Directory集成以及所有这些好东西。 REST非常适合公共应用程序和混搭,但并不适合每种情况。

关于c# - WCF Rest服务与存储库模式一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2553616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com