问题标签 [service-design]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - 处理大型 WCF 服务的最佳实践
我正在开发 WPF 中的 4 人网络游戏,并在此过程中学习 WCF。到目前为止,为了处理网络通信,我遵循了关于 Coding4Fun 游戏的 YeahTrivia 游戏的建议:我使用 a dualHttpBinding
,并使用CallbackContract
接口将消息发送回客户端。它工作得很好。
但是,我的服务变得非常大。它有方法/回调来处理游戏本身,还有聊天系统、登录/注册过程、匹配、花名册/玩家信息等。服务器和客户端都变得难以维护,因为一切都绑定到一个单一界面。例如,在客户端上,我必须将回调重定向到游戏页面、大厅页面等,我觉得这非常乏味。我希望能够处理游戏页面上的游戏回调、聊天窗口上的聊天回调等。
那么最好的处理方法是什么?我想了很多事情,但不确定哪个最好:将服务拆分为多个,在我的服务上有多个“端点”,或者是否有其他技巧可以在适当的情况下部分实现服务?
谢谢
wcf - Web 服务合同设计 - 单一职责
我很想知道大多数开发人员如何为他们的 Web 服务设计合同。我对服务架构很陌生,尤其是对 WCF 很陌生。
简而言之,我想了解您在操作中返回的对象类型,以及您的服务中的每个操作是否返回相同的对象?
例如,考虑以下内容:目前,我创建的所有服务都继承自 ServiceBase 对象,该对象类似于:
Response
表示返回对象,其组成如下:
因此,任何派生服务都将返回由相同对象组成的响应。现在最初,我觉得 with 将是一个很好的设计,因为这会迫使每个服务对单个对象负责。在大多数情况下,这已经解决了,但是随着我的服务的增长,我发现自己对这种设计提出了质疑。
举个例子:你有你正在写的音乐服务,你的服务之一是“专辑”。因此,您编写基本的 CRUD 操作,它们几乎都返回 AlbumDto 的集合。
如果你想编写一个返回专辑类型的操作怎么办。(LP、Single、EP 等)所以你有一个对象 AlbumTypesDto。您会为这个对象创建一个新服务还是让您的相册服务返回许多不同的对象?
我可以想象一个具有多种不同返回类型的复杂服务是繁琐且糟糕的设计,但编写一个全新的服务可能只是一种或两种服务操作方法是矫枉过正的。
你怎么看?
c# - 构建更好的 WCF 服务
我正在构建 WCF 服务,我对 WCF 服务设计有疑问:
例如:
如果我有一个具有两类Person和Product的数据访问层:
两个类都有Select()方法。为了在 WCF 中使用这些类,我在之前的项目中使用了两种方式
1)创建两个服务类PersonService和ProductService:
在这种情况下,我必须单独创建/配置服务类。
2)创建一个服务类并使用不同的名称:
在这种情况下,我只需要创建/配置一个服务类。但是方法有更大的名称(例如:PersonSelect()而不是Select())
哪个是更好的方法?为什么?
谢谢。
wcf - 用于 SOA 设计的 WCF 资源
我正在为以下特定编程任务寻找最佳资源和书籍。你能提供给他们吗?
注意:我认为,这个问题适合堆栈溢出论坛,因为它正在解决特定的编程任务。
• 处理OOP 和SOA 之间的关系。
• 为可扩展性设计实体。在不影响服务消费者的情况下扩展数据合同。
• 从标准元素组成实体。如果可能,请使用标准元素来组成您的服务使用的复杂类型。
• 合同的版本控制。
• 确保服务可以检测和管理重复消息(幂等性)。
c# - 理解服务之外的数据:SOA
注意:服务外的数据是指服务返回并被客户端消费的消息。
我有一个名为 LastBuyer Service 的服务。当我将 bookID 输入服务时,这将返回一本书的最后一个买家姓名。当我为相同的图书 ID 调用服务时,它会返回不同的结果(如果新买家购买了一本书)。所以我无法在客户端缓存服务的结果(对于特定的 BookID)。
在阅读文章“内部数据与外部数据”时,它显示“可以缓存”——“由于消息的 ID 返回相同的数据,因此可以缓存消息”。
参考:http: //msdn.microsoft.com/en-us/library/ms954587.aspx
我的理解中缺少什么?
上面示例中的消息是不可变的吗?
上面示例中的版本相关和版本无关标识符是什么?
消息的版本控制是如何在这里完成的?
哪本 WCF 书籍通过示例清楚地解释了 SOA 概念和模式?
阅读
- 服务设计原理:服务模式和反模式
rest - 用户和会话的 REST API URI 设计?
我是 REST 设计的新手,所以我想在这里提供一些指示。
这是我到目前为止所拥有的:
我想知道这里的会话/登录/退出的东西。我在这里的想法是正确的,还是应该以其他方式设计成更加 REST'ish?
另外,注册用户呢,应该是:
即使它也开始一个新的会话?
django - 如何通过请求更新 Web API 资源,同时与后端做出反应?
当您还需要后端对这些更改采取措施时,如何从客户端更新(RESTful)资源?
假设我有一个带有以下资源的 RESTful Web API:
- 工人 - id,first_name,last_name,...
- 项目 - id、title、due_date、...、worker [ref to Worker]。一个项目只有在它属于一个工人时才能存在。
在客户端(通常是一个移动应用程序)中,用户可以检索一些工作人员的项目列表。然后,他们可以修改该列表中的每个项目(更新)、删除或创建新项目。更改必须在客户端本地进行,直到发送“发送”命令,然后服务器才应该接收更新。有点像经典的表单用例。
棘手的部分: 我需要后端根据每个变化采取行动,无论是单独的还是整体的。例如:
- 用户检索了一些工人的项目列表,删除了一个项目,还更新了另一个项目的到期日期。
- 根据这一变化,后端既需要向该项目的所有成员发送推送通知,也需要根据项目的总变化重新计算相关工作人员的优先级(一个被删除,另一个被推迟......)。
我如何以最好的方式实现这一目标?
- 如果我自己更新/删除/创建每个项目(使用单独的 POST、PUT 和 DELETE),后端何时会完成整体重新计算任务?
- 如果我将它们全部更新为一个批量(使用 PUT),那么后端将需要了解究竟发生了什么变化(哪些被删除,哪些被修改......),这是一件苦差事。
- 我听到的另一个选择是创建第三个实用程序资源,类似于“WorkerProjectUpdater”,它保存需要进行的更改,如事务,然后让“守护程序”通过它并实际提交更改。这也很难实现,因为在真实故事中存在许多类型的修改,并且为每种类型的更改创建资源(带有模型和数据库记录)将非常复杂。
我将Django与Django Rest Framework一起用于该 Web 服务。
感谢你的帮助!