SOA(商业智能和面向服务的架构)中的报告

2024-03-20

我的 SOA 包含员工服务和旅行服务。旅行服务将在[Travel] 数据库中为employeeId 创建一个travelID 条目。员工将使用“TravelUI”网站(该网站调用旅行服务将详细信息存储在数据库中)来请求旅行。有一个“ManagerUI”网站,经理将使用该网站来批准旅行请求。 “ManagerUI”网站使用旅行服务和员工服务来获取详细信息。当经理批准旅行时,通过使用旅行服务中的操作,旅行记录(在[旅行]数据库中)成为批准的。

注意:员工详细信息存储在 [Employee] 数据库中,员工服务使用此数据。

现在,我们需要生成一个包含 TravelID、旅行请求日期、EmployeeID、EmployeeName、EmployeePhone 的报告。前三项信息来自[Travel]数据库,其余信息来自[Employee]数据库。该报告将使用 SSRS 生成。

这里的问题不是是否可以通过组合两个数据库来生成报告;而是关于是否可以通过组合两个数据库来生成报告。但由于SOA的引入,这成为一个复杂的问题。

  1. 我们该如何解决这个问题

  2. 我的设计中有哪些错误导致问题变得复杂?

  3. 您对处理此类问题有什么好的文章建议吗?

注意:这里计划使用 WCF 来实现 SOA。

EDIT:虽然标题提到了商业智能,但我正在寻找一个主要不涉及数据集市/数据仓库的答案。数据仓库的答案也很受欢迎 - 但主要目标是没有数据仓库。

READING:

  1. 面向服务的商业智能http://msdn.microsoft.com/en-us/library/bb245659.aspx http://msdn.microsoft.com/en-us/library/bb245659.aspx

  2. 面向服务的商业智能架构http://www.hpl.hp.com/personal/Claudio_Bartolini/download/soca07.pdf http://www.hpl.hp.com/personal/Claudio_Bartolini/download/soca07.pdf

  3. 面向服务的架构和商业智能http://www.servicetechmag.com/I53/0811-2 http://www.servicetechmag.com/I53/0811-2

  4. Microsoft 的企业服务总线 (ESB)http://msdn.microsoft.com/en-us/library/aa475433(v=bts.10).aspx http://msdn.microsoft.com/en-us/library/aa475433(v=bts.10).aspx

  5. https://stackoverflow.com/questions/41353/net-esbs-out-there https://stackoverflow.com/questions/41353/net-esbs-out-there


我所看到的问题是 SSRS 违反了合约中心化模式 http://soapatterns.org/contract_centralization.php。相反,您的报告应该从您创建的服务或通过扩展这些服务来生成。否则,您会在报告和数据库之间创建基于技术的紧密耦合,这将使在需要时修改、迁移或重新实施您的差旅和员工系统变得更加困难。通过这种方式添加的报告越多,更改差旅和员工实施就会变得越困难。

如果您还没有,我将在旅行服务上创建报告操作,例如,如果您使用基于 SOAP 的服务,请添加GetTravelRequests操作,它接受某种查询和分页参数,仅返回匹配记录的 TravelID、旅行请求日期、EmployeeID。然后创建一个GetEmployeeTravelRequests,组成GetTravelRequests with a GetEmployeeDetails从员工服务进行操作。

这将比基于 SSRS 的报告慢,但您可以自由地更改旅行和员工服务的底层实现,只要您不更改服务合同。

我有点假设您正在使用 SOAP,这是上面答案所基于的,但是如果可以选择 RESTful 服务,那么我会推荐以下内容。而不是暴露数字TravelIDs and EmployeeIDs,而不是use URIs http://www.soapatterns.org/entity_linking.php。例如,旅行服务将为员工 URI 创建旅行资源Travel数据库。然后创建一个原子饲料 https://www.rfc-editor.org/rfc/rfc5005旅行请求。您可以到此为止,并且报表用户需要员工详细信息时,他们可以点击员工 URI 链接。否则,您可以使用员工 URI 创建一个组合 Atom 源,其中包含每个差旅请求的员工详细信息。

后一种方法的主要优点是通过使用 HTTP 缓存减少数据库负载; HTTP GET 是世界上最优化的操作。您的报告现在是实时报告,而不仅仅是上次生成时的最新报告,可能是每天一次或每月一次,如果您正确构建提要,那么非标题页面永远不会更改并且可以缓存一年或更长时间。如果您假设员工详细信息很少更改,则可以将 max-age 设置为 1 天,在这种情况下,对特定员工详细信息的查询每天只会访问数据库一次。

最后,另一个好处是,添加一个TravelRequests采集资源到Employee资源,其中包含该员工的所有旅行请求的基于 Atom 的分页列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SOA(商业智能和面向服务的架构)中的报告 的相关文章

  • EF 和 WCF 错误 - SQL Server Compact 不适用于 ASP.NET 开发

    您好 我有一个简单的 wpf 应用程序设置来使用在另一个项目中运行的测试 wcf 服务 该服务使用实体框架从附加到 wcf 服务项目的 SQL Compact 3 5 sdf 中检索几行 我收到 SQL Server Compact 不适用
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • “if”在 ASP.NET MVC View (.aspx) 文件中被认为有害?

    我记得看到一个博客 或其他内容 说你不应该在 ASP NET MVC 的 aspx 文件中使用 但我不记得它说的替代方案是什么 有人记得看过这个并指出我吗 基本上 这意味着您的视图中不应该有大量的 if 语句 您的控制器和视图模型应该能够处
  • WCF 客户端因服务中断而挂起

    我有一个相当简单的 WCF 服务 它为一堆智能客户端执行单向文件同步 我注意到 当通话期间出现网络或服务中断时 客户端将无法与服务器通信 直到整个应用程序重新启动 该服务运行于BasicHttpBinding并由 IIS6 一个 svc 页
  • 禁止/阻止选择 wpf 中禁用的组合框项目

    我正在编写一个应用程序 其中我想禁用其中的一些项目ComboBox并且还想禁止 阻止选择禁用的项目 请注意ComboBox在主窗口中有另一个 ComboBox 作为 ComboBox Item init 在运行时由DataTemplateS
  • ServiceStack:异步/等待服务处理程序

    我读过一些涉及这个问题的问题 尽管其中许多已经有好几年了 如何在 ServiceStack API 中编写 Service 处理程序 使其成为 async await docs servicestack net 上没有任何文档提到 asyn
  • 考虑周末和节假日,添加迄今为止的工作日

    给定一个日期和假期列表 如何将给定的工作日数添加到该日期 对于不考虑假期的较小问题有很多解决方案 例如参见向日期添加天数但不包括周末 https stackoverflow com questions 279296 adding days
  • 检查Web服务是否存在

    有人可以告诉我确定给定 URL 是否存在 Web 服务 ASP NET 的最佳方法吗 我假设一种方法类似于使用 System Net Webclient 发出请求 但我如何确定它是否是有效的 Web 服务以及我应该发出哪种类型的请求 编辑
  • 如何使用 json.net 在生成的 json 中“内联”属性

    我的一个类中有一个属性 我试图用 json net 序列化它 我想 内联 这意味着 我不想将该属性嵌套到具有属性名称的元素中 但其内容直接位于其父级中 这是一个例子 假设我有以下类结构 public interface ISteeringW
  • Phantom JS 50% 的时间失败

    我搜索一个文本框 然后尝试用字符串填充它 这是代码 var fname driver FindElement By Name iFirstName 50 if fname null do System Threading Thread Sl
  • 在(每个)Web API 操作之前执行代码

    我有一个 Web API 接口 我正在尝试适应多租户架构 以前 我们采用 WCF 模式 将参数 客户端 ID 传递给服务 然后服务将其存储起来以供稍后在代码中使用 这意味着客户端 ID 不必是传递给每个调用的第一个参数 我想对 Web AP
  • 如何使用 Serilog ForContext

    我是 Serilog 新手 很难弄清楚如何使用上下文功能 当我运行下面的代码时 输 出文件不包含报告 ID 我缺少什么想法吗 var logger new LoggerConfiguration WriteTo File C Log txt
  • LINQ:获取表详细信息

    我正在使用 LINQPad 我想了解表的架构详细信息 我知道我是用 SQL 来做的 SELECT column name FROM information schema columns WHERE table name table name
  • .NET 有 Base64Stream 吗?

    如果我想生成 Base64 编码的输出 我该如何在 NET 中做到这一点 我知道从 NET 2 0 开始 就有了IC加密转换 http msdn microsoft com en us library system security cry
  • 在 Spring 中设置 WS https 调用超时 (HttpsUrlConnectionMessageSender)

    我正在尝试为 WS 调用设置超时 我延长了WebServiceGatewaySupport并尝试将发送者超时设置为如下 public Object marshalSendAndReceive Object requestPayload We
  • 在分布式事务中手动登记后,使用 enlist=false 的连接不会关闭

    我有一个分布式事务上下文使用ServiceDomain 在其中 我打开一个 SQL 连接 其中连接字符串指定Enlist false 这样它就不是自动地被纳入交易 然后 如果我使用手动在分布式事务中登记连接EnlistDistributed
  • 无法在 Visual Studio 2022 中启动调试适配器

    如果我创建一个启用了 Docker 支持的 ASP Core MVC 目标框架 5 0 并启动它 我会得到 发生一个或多个错误 无法启动调试适配器 附加信息可能会 在输出窗口中可用 操作被取消 这是调试输出 启用 DebugAdapterH
  • 作为服务运行时未找到 PowerShell 模块

    我有一个项目 我将 Office 365 许可证分配给用户 有一个 Web 项目允许管理员查看可用许可证并为用户选择许可证 在后台 有一项服务每 15 分钟执行一次实际的许可证分配 以及许多其他任务 我们不直接分配许可证的原因是用户可能尚未
  • PowerShell 找不到过载

    我正在尝试使用https sshnet codeplex com https sshnet codeplex com 允许 PowerShell 脚本将文件上传到 SFTP 服务器 一切似乎都有效 除了找不到该方法的重载UploadFile
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js

随机推荐