0

我不确定这是否是堆栈溢出问题,但这里有......

假设您有两个站点:

  • 站点 A 托管一个可公开访问的 Web API,该 API 在同一站点使用 NoSQL 数据库和一堆 Web 应用程序。
  • 站点 B 托管 SQL Server(与站点 A NoSQL 数据库不同的数据)和一些其他 Web 应用程序。

问题是站点 A 的 Web API 需要访问站点 B 的 SQL Server 以获取其某些功能。您可以公开 SQL Server IP 并以这种方式进行存储的 proc 调用,但是否可以创建一个托管在站点 B 上并代理来自站点 A 的 SQL 调用的通用 Web API?您不想公开您的 SQL Server IP,对吗?

如果您为要在 Web API 上调用的每个存储过程创建一个方法,这是可能的,但是否不可能避免这种情况并拥有一个通用代理?

如果我走错了方向,请告诉我...

4

2 回答 2

1

您所描述的似乎是 SQL 服务器通过 web api 的隧道。我不会鼓励它。

我不会将这两个系统视为 SQL Server 数据库与 NoSQL 数据库,而是将其视为将它们抽象为域实体的服务。

如果两个系统需要交换数据,就会以这些实体的形式出现。我有这种感觉的原因:

  1. 保持系统隔离,模式更改不需要影响下游系统。
  2. 允许灵活地封装一个系统的内部,以便设计消费者可以由合同驱动。

编辑:

我不鼓励这样做,因为

  1. 这往往有一个复杂的设置,站点 A 现在谈论它不拥有或控制的原始数据。您可能很容易处于 SQL 服务器需要 B 要求的更改的位置,这使得 A 非常脆弱(事情很容易破裂)。
  2. 与 A 无关的业务更改/逻辑可以通过 B 所做的 DDL 等更改潜入。

我希望 A 和 B 之间的耦合非常松散。定义数据的所有权,其他消费者需要通过合同进行通信。

于 2013-08-14T12:09:11.767 回答
1

我最终创建了一个带有控制器的 ASP.NET MVC 站点,该控制器使用反射来确定客户端试图根据传入的参数调用哪个存储库方法。所以它基本上是一个用于远程调用 SQL procs 的 API。当然,它具有身份验证。它托管在站点 B。

站点 A 托管一个调用 API 并获取数据的站点。

编辑:

WCF 数据服务也可以解决这个问题。

于 2013-09-17T10:00:18.540 回答