- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现自己负责继续开发一个不是我最初设计的系统,并且不能问最初的设计师为什么要做出某些设计决定,因为他们已经不在了。我是一个设计问题的初级开发人员,所以当我开始这个项目时我真的不知道该问什么,这是我的第一个 SOA/WCF 项目。
该系统有 7 个 WCF 服务,将增长到 9 个,每个服务都自托管在单独的控制台应用程序/Windows 服务中。它们都是单实例和单线程的。所有服务都具有相同的 OperationContract:它们公开了 Register() 和 Send() 方法。当客户端服务想要连接到另一个服务时,它们首先调用 Register(),然后如果成功,它们将使用 Send() 完成所有其余的通信。我们有一个 DataContract,它有一个枚举 MessageType 和一个 Content 属性,它可以包含其他 DataContract“有效负载”。服务对消息的处理由枚举 MessageType 决定......一切都通过 Send() 方法,然后路由到 switch 语句......我怀疑这是不寻常的
Register() 和 Send() 实际上是 OneWay 和 Async...服务的所有结果都通过 WCF CallbackContract 返回给客户端服务。我相信使用 CallbackContracts 的原因是为了促进我们正在使用的 Publish-Subscribe 模型。问题不是我们所有的通信都适合发布订阅,并且使用 CallbackContracts 意味着我们必须在返回的结果消息中包含源详细信息,以便客户端可以计算出返回的结果最初是为了什么......再次客户端有一个 switch 语句来计算如何处理来自基于 MessageType(和其他嵌入详细信息)的服务的消息。
在拓扑方面:服务在图中形成“节点”。每个服务都硬编码了它在启动时必须连接的其他服务的列表,并且在建立了它需要的所有连接之前不允许客户端服务向它“注册”。例如,我们有一个 LoggingService 和一个 DataAccessService。 DataAccessSevice 是 LoggingService 的客户端,因此 DataAccess 服务将在启动时尝试向 LoggingService 注册。在它可以成功注册之前,DataAccess 服务将不允许任何客户端向其注册。结果是,当系统作为一个整体启动时,服务以级联方式启动。我不认为这是一个问题,但这不寻常吗?
更复杂的是,系统要求之一是服务或“节点”不需要为了相互发送消息而直接相互注册,而是可以通过间接链接进行通信。例如,假设我们有 3 个服务 A、B 和 C 连接在一个链中,A 可以通过 B 向 C 发送消息......使用 2 跳。
我实际上负责这个任务并编写了路由系统,这很有趣,但是在我问为什么真的需要它之前,领导就离开了。据我所知,服务没有理由不能直接连接到他们需要的其他服务。更重要的是,我必须在所有内容之上编写一个可靠性系统,因为要求在系统中的节点之间具有可靠的消息传递,而 WCF 可以通过简单的点对点链接可靠地完成这项工作。
在这个项目之前,我只在 winforms 桌面应用程序上工作了 3 年,不知道更好。我怀疑这个项目的事情过于复杂:我想总结一下,我的问题是:
1) 消息在间接链接上跳跃的图拓扑的想法不寻常吗?为什么不直接将服务连接到他们需要访问的服务(这实际上是我们所做的......我认为我们没有任何消息跳跃)?
2) 在 OperationContract 中只公开 2 个方法并使用 MessageType 枚举来确定消息的用途/如何处理它是不寻常的吗? WCF 服务不应该公开许多具有特定用途的方法,而客户端选择它想要调用的方法吗?
3) 是否通过 CallbackContracts 将所有通信返回给客户端异常。当然同步或异步请求响应更简单。
4) 一个服务在连接到它的所有服务(它是一个客户端)之前不允许客户端服务连接到它(注册)的想法是一个合理的设计吗?我认为这是我同意的唯一设计方面,我的意思是 DataAccessService 不应该接受客户端,直到它与日志记录服务建立连接。
我有很多 WCF 问题,更多问题将在后面的主题中提出。提前致谢。
最佳答案
嗯,整个事情似乎有点奇怪,同意。
All of them are single instance and single threaded.
All services have the same OperationContract: they expose a Register() and Send() method.
CustomerService
可能有类似
GetCustomerByID
的方法,
GetAllCustomersByCountry
等方法 - 取决于您的需要。
Is this idea of a graph topology with messages hopping over indirect links unusual?
Is doing all communication back to a client via CallbackContracts unusual.
GetCustomerByID
- 使它们成为标准的请求/响应调用 - 客户端请求某些内容(通过提供客户 ID)并返回
Customer
对象作为返回值。简单多了!
关于wcf - SOA 和 WCF 设计问题 : Is this an unusual system design?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2277662/
我正在尝试使用两个线程的代码,一个线程递增共享长变量,另一个线程递减 var。 class Shared { private long a; public void incr() {
我正在使用 Linux 并尝试与信号处理相关的代码。我正在尝试以下代码,但我无法理解此代码的行为。 /**Globally declared variable**/ time_t start,
对于一个涉及从光谱数据计算键长的项目,我使用 Solve[] 来求解一个相当简单的未知方程。当我更改输入时,我开始注意到“异常”行为。具体来说,当我更改一个数字并解决时,结果就是之前的答案。然而,再次
请帮我找到这个“段错误:11”。 argv 输入看起来不错。顺便说一句,这是一个就餐哲学家问题。它在一小时前工作,但在 minix 机器上,但现在在 Unix 机器上它无法运行。请帮我解决这个愚蠢的错
场景:我向服务器请求零件。它给了我这个(它是伪造的,但代表了我正在看的东西): { PartNumber : "XYZ", Description: "ABCFOO", ProductClass: "
这是摘自“JavaScript,权威指南”中有关 arguments 对象的核心 JavaScript 引用的一段话: In non-strict mode, the Arguments object
程序的输出是这样的: 虽然内容正确 (目前仅在尝试解密产生错误结果时) 但是为什么会出现这个错误? udit@udit-Dabba /opt/lampp/htdocs $ ./a.out Error
我有一个购物 list 应用程序,我正计划将 Core Data 与它一起使用。 我有一个杂货店 Item 抽象类,它具有三个子类:RecipeItem、QuickAddItem 和 HybridIt
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: What does the ',' operator do in C? 好吧,我今天接受了采访,他们问我下面
我有一个简单的“用户”集合,现在我只有 2 个文档。 { "_id": ObjectId("4ef8e1e41d41c87069000074"), "email_id": {
在行:std::ifstream fileOpen(file.c_str()); 在下面的函数中程序崩溃并给我这个错误: This application has requested the Runt
我有一个未排序的数组,包含 10,000 个从 0 到 9,999 的整数。我想对这个未排序的数组应用合并排序,我编写了以下代码- import sys def merge_sort(data):
当我关闭 Qt 程序 (g++ 4.4.0) 时,出现 Microsoft Visual C++ Runtime Library 错误“此应用程序已请求运行时以异常方式终止它”。但是当我在调试器中运行
我正在使用 Instagram API 开发自己的安卓应用。在我家的 Wi-Fi 上,一切都很好。它已经过 100 多次测试。今天我尝试通过我公司的公司 Wi-Fi 将我的 Sandbox 客户端连接
我有一个5张谷歌电子表格和一个应用程序脚本项目,简而言之就是这样做的:。当我为x调用它时,它成功地返回了正确的数组。不幸的是,对于y和z,它都在前15个元素之后停止。是否有解决此问题的方法?这一切为什
我发现自己负责继续开发一个不是我最初设计的系统,并且不能问最初的设计师为什么要做出某些设计决定,因为他们已经不在了。我是一个设计问题的初级开发人员,所以当我开始这个项目时我真的不知道该问什么,这是我的
我的 Meson项目我有一个位于“不寻常”位置的依赖项: /opt/MyDependence/lib/libmyLib.so /opt/MyDependence/include/myLib.hpp 我
我有这个 Pandas DataFrame,有两列 label 和 time >>> df = pd.DataFrame([{'a':{'tier':'one','app':'frontend'},'
“Scheme 编程语言第 4 版” 第 3.3 节 Continuations给出了以下示例: (define product (lambda (ls) (call/cc (
我有一个 C++ 程序,它在进程启动后立即给出此错误 - 显然是在任何用户代码执行之前。它仅在启用内联时发生。即使内置了调试符号,我也无法进入代码。当我在 Visual Studio 中按下 F10
我是一名优秀的程序员,十分优秀!