- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑将我的服务层和数据层(存储库模式)移到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/
我想要的是能够在输入获得焦点或失去焦点时执行某些操作(两个事件)。 我尝试了以下方法,但这按事件单独工作(单独编码时):仅在焦点上,或仅在失去焦点时。 另外,我希望它尽可能跨平台(包括触摸设备),这是
我分别研究了TableView的Filtering和Pagination。 过滤: this帖子帮助我满足了我的需要 分页: this , this帖子也帮助了我 我想像这样将它们组合在一起: 详情-
我是 TDD 方法的新手,所以我想知道是否有人经历过这种机智可以启发我一点。我想获得一些关于如何一起使用 UML 和 TDD 方法的线索。 我已经习惯了:用 UML 设计 --> 生成骨架类(然后保持
我尝试使用入口点和 cmd 设置 Docker。 FROM debian:stretch RUN apt-get update && \ apt install gnupg ca-certificat
我想要一个 Class 对象,但我想强制它所代表的任何类扩展类 A 并实现接口(interface) B。 我能做到: Class 或者: Class 但我不能两者兼得。有办法做到这一点吗? 最佳答案
我是 Rubymine 的长期用户。 Rubymine 非常适合基于 html 的 Rails 应用程序,但我现在正在做更多的 SPA 客户端工作(例如 javascript/react)。我发现我真
我注意到我使用的某个脚本依赖于原型(prototype)。 (Lightbox 2) 它会与 jQuery 在同一页面上一起工作吗?有没有办法确保它们不冲突? 最佳答案 可以,但你需要采取 speci
我需要对表中显示的数据进行分页并通过 ajax 调用获取它 - 这是我通过使用具有以下配置的 dataTables 插件来完成的 - bServerSide : true; sAjaxSource :
我是 gtk 新手,所以想知道在 C 语言中归档和 gtk 是否可以一起使用?例如,我可以从 .txt 文件中读取,然后在相同的代码中使用 gtk 在标签或其他内容中显示它吗?如果是,怎么办? 谢谢!
有没有人设法得到Bck2Brwsr最近与 Java 8/JavaFX 8 一起工作?有没有兼容的机会?我找不到太多关于它的信息,也没有一个好的起点。使用给定的 Maven archetype我遇到了几
在我的应用程序中,用户通过 openid(与 stackoverflow 相同)登录/注销。 我想通过 oauth 向第三方应用程序开放我的应用程序。 如何创建我的 openid-consumer 应
我在启动和运行 Hibernate 和 Spring 时遇到一些问题。我有一个网络服务器项目,它使用了其他几个具有持久实体的项目。我遇到的问题是,对于存储在 WEB-INF/libs 内的另一个 ja
我有 @ControllerAdvice 类,它处理一组异常。我们还有一些其他异常,这些异常用 @ResponseStatus 注释进行注释。为了结合这两种方法,我们使用博客文章中描述的技术:http
我想在屏幕上使用进度条而不是 progressDialog。 我在我的 XML View 文件中插入了一个进度条,我想让它在加载时显示并在不加载时禁用它。 所以我使用的是可见的,但它发生了,所以其余的
CREATE TABLE `users` ( `id` int(11) AUTO_INCREMENT, `academicdegree` varchar(255),
IN() 中使用的查询返回:1, 2。然而,整个查询返回 0 行,这是不可能的,因为它们存在。我在这里做错了什么? SELECT DISTINCT li.auto_id FROM links
亲们, 我如何在使用 Jade 生成的表单上实现 jQuery 样式?我想做的是美化 表单并使它们可点击。我在 UI 方面很糟糕。期间。 我如何在表单上实现这个可选择的方法? http://jquer
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我可以: auto o1 = new Content; 但不能: std::shared_ptr o1(new Content); std::unique_ptr o1(new Content); 我
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!