Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在web API上公开SQL Server存储过程_C#_Sql Server_Proxy_Asp.net Web Api - Fatal编程技术网

C# 在web API上公开SQL Server存储过程

C# 在web API上公开SQL Server存储过程,c#,sql-server,proxy,asp.net-web-api,C#,Sql Server,Proxy,Asp.net Web Api,我不确定这是否是一个堆栈溢出的问题,但接下来 假设您有两个站点: 站点A承载一个可公开访问的web API,该API在同一站点上使用一个NoSQL数据库和一组web应用程序 站点B承载一个SQL Server(与一个NoSQL数据库不同的数据)和一些其他web应用程序 问题是站点A的web API需要访问站点B的SQL Server以实现其某些功能。您可以公开SQL Server IP并以这种方式进行存储过程调用,但是否可以创建一个通用web API,该API将托管在站点B上,并代理来自站点

我不确定这是否是一个堆栈溢出的问题,但接下来

假设您有两个站点:

  • 站点A承载一个可公开访问的web API,该API在同一站点上使用一个NoSQL数据库和一组web应用程序
  • 站点B承载一个SQL Server(与一个NoSQL数据库不同的数据)和一些其他web应用程序
问题是站点A的web API需要访问站点B的SQL Server以实现其某些功能。您可以公开SQL Server IP并以这种方式进行存储过程调用,但是否可以创建一个通用web API,该API将托管在站点B上,并代理来自站点a的SQL调用?您不想公开您的SQL Server IP,对吗

如果您为要在web API上调用的每个存储过程创建一个方法,那么这是可能的,但是不可能避免这种情况并使用通用代理吗


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

您所描述的似乎是SQL server over web api的隧道。我不会鼓励的

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

如果这两个系统需要交换数据,数据将以这些实体的形式存在。我有这种感觉的原因是:

  • 保持系统隔离,模式更改不必影响下游系统
  • 允许灵活地封装一个系统的内部,以便设计使用者可以由契约驱动
  • 编辑:

    我不鼓励这样做,因为

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

  • 我更喜欢在a和B之间有一个非常松散的耦合。定义数据的所有权,其他使用者需要通过合同进行通信。

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

    站点A承载一个调用API并获取数据的站点

    编辑:


    我忘了澄清NoSQL和SQL Server数据库存储不同的数据。站点A上的web API需要同时使用这两个数据库。但是是的,这是一个web API上的隧道。你为什么不鼓励它呢?我的回答补充了几点,除此之外,还有一个潜在的安全漏洞,特别是如果API是通过互联网的话。