【问题标题】:Designing an architecture for exchanging data between two systems设计用于在两个系统之间交换数据的架构
【发布时间】:2011-07-27 21:18:17
【问题描述】:

我的任务是创建一个中间层,该层需要在两个独立系统(例如接收器 中间层 (IL) 发送器)之间交换数据(通过 HTTP)。 Receiver 和 Sender 都通过 Web 服务公开一组 API。每次在 Sender 系统中发生事务时,IL 都应该知道它(我正在考虑创建一个不断 ping Sender 的 Windows 服务),处理数据,然后将其传递给 Receiver。 IL 可以将数据临时存储在 SQL 数据库中,直到将其传输到 Receiver。我有以下问题-

  1. 是否可以使用 WCF(没有经常使用它)与发送方和接收方通信(都公开 Web 服务)?
  2. 如何确保保证交付?
  3. 如何确保 Internet 上消息的安全?
  4. 处理并发问题的最佳实践是什么?
  5. 错误处理的最佳做法是什么?
  6. 如何确保数据的可靠性(数据不被篡改)
  7. 如何确保将数据接收回发件人?
  8. 我需要注意哪些限制?

我需要使用自定义 .NET 解决方案在 MS 平台上实现此功能。我被告知不要使用像 BizTalk 这样的任何中间件。接收器是一个 SDFC 实例,如果这很重要的话。

非常感谢任何指针。谢谢。

【问题讨论】:

  • 为什么不是 Biztalk(成本或技术问题)?相同的限制是否适用于其他解决方案?开源呢?您真的必须自己编写所有代码吗?
  • 实际上不确定。但我认为这可能是成本,因为它是一家小公司。

标签: web-services architecture data-exchange


【解决方案1】:

协调交换的 Windows 服务听起来不错。 是的,WCF 可以处理传统的 Web 服务。

如何确保保证交付?

为确保交付,您可以使用TransactionScope 来处理数据之间的传递 Receiver <=> Intermediate LayerIntermediate Layer <=> Sender 但我不会尝试一起做。

您可能需要考虑某种排队机制来将数据发送到接收方;我想我更多的是考虑逻辑队列而不是实际的排队组件。工作流框架也是一种选择。

确保您有良好的日志记录/审核;确保它坚如磐石、信息正确且易于阅读。假设您编写了一项服务,它将在没有监督的情况下执行,因此操作/支持方面的要求更高。

想想场景:

  • 您如何管理失败的交付?
  • 如果接收方(或发送方)在一段时间内不可用会发生什么情况(多长时间?);例如:您是否需要通过电子邮件“升级”给操作员?

如何确保 Internet 上消息的安全性?

HTTPS。假设其他现有客户端调用 Web 服务,它们如何确保安全? (我在考虑加密)。

处理并发问题的最佳做法是什么?

嗯,可能是一个单独的问题。你应该能够很容易地找到这方面的信息。我们正在获取多少数据?什么样的频率?您打算拥有多少个 Windows 服务实例 - 如果一个就足够了,为什么并发会成为问题?

错误处理的最佳实践是什么?

与并发相同,但我可以提供一些建议:

  • 使用已建立的日志框架,我非常喜欢 MS EntLibs,但还有其他的(重新使用当前使用的任何东西可能会更有意义 - 如果有的话)。
  • 请记住,执行是无人值守的,因此请确保信息完整、清晰和明确。一旦达到舒适程度,我会很想记录更多并拨号。
  • 使用顶级处理程序来确保不会丢失任何东西;但不要害怕深入登录应用程序,您仍然可以获得有用的上下文(例如正在发送/接收的数据的元数据)。

我如何确保将数据接收回发件人?

包含它(发送收据)作为交易的一部分。

换个角度,看看 CodePlex 的 ESB 类型库,你可能会发现一些有用的东西:http://www.codeplex.com/site/search?query=ESB&ac=8 例如ESBasic,它似乎是一个可以重用的类库。

【讨论】:

  • 感谢您的详细回复!非常感激。我倾向于使用 MSMQ 来确保在事务范围内有保证的交付。即使中间系统出现故障,消息仍在队列中,系统将在重新联机后传输它们,这样我就不会丢失它们。根据您的回复,我正在考虑创建一个 WCF 客户端,它同时使用发送方和接收方的 Web 服务,使用广泛的日志记录,提供前端简单的 Windows UI,以便普通用户可以看到被拉入和发出的内容,使用广泛的日志记录,并使用 HTTPS。我在正确的道路上吗?
  • 为了回答您的一些问题,每天可能有几千笔交易,不确定频率。我正在考虑只使用一个 Windows 服务,但我有点担心两次处理相同的数据。使用 MSMQ,如果消息在队列中很长时间,我可以向管理员发送电子邮件。如果接收方或发送方不可用,它应该能够从中断的地方继续(我该如何完成?)。非常感谢。
  • 是的,我认为你在正确的道路上。我以前没有使用过 MSMQ,我唯一关心的是如何将它与接收器 Web 服务集成 - 如果你能发现它会是一个很好的解决方案。
  • 哦,是的——只要你开发得当,你就可以通过 WCF 使用消息队列(在后台使用 MSMQ)。
  • 非常感谢,阿德里安 K!
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2022-08-20
  • 2011-07-19
  • 2020-04-28
  • 1970-01-01
  • 2011-09-26
  • 2014-01-07
相关资源
最近更新 更多