首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用ASP.NET Web的存储过程

调用ASP.NET Web的存储过程
EN

Software Engineering用户
提问于 2015-05-06 07:47:22
回答 2查看 6.3K关注 0票数 2

我们正在开发一个使用Server数据库、ASP.NET WebAPI2.2服务和其他外部服务的大型系统。

在处理表上的当前数据时,我们需要在表上加载更多数据。为了允许在后台加载数据,我们从CLR存储过程中调用ASP.NET Web。

然后,我们的SQL检索更多数据,并将其插入Server。

更好地解释这一过程如下:

  1. Server存储过程检测到我们需要更多的数据,然后调用存储过程。
  2. 调用ASP.NET Web。
  3. SQL检索更多数据,然后插入到Server中。

你觉得这个“建筑”怎么样?你知道更好的方法吗?

我在这里的疑问是第二步:一个调用ASP.NET Web的Server数据库。但我们需要在后台做这方面的工作。

而且,我们需要插入到Server中的新数据可能在WCF SOAP服务中。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2015-05-06 08:17:30

我在以这种方式使用CLR程序集的地方工作过。在我看来,这是个坏主意。

这是我的推理。

1:在数据库中嵌入逻辑总是不好的。这是一种“编程哲学”的立场,但我觉得这是有道理的。

2: CLR仅限于mssql server上的.net 2。

3: CLR可能由于其对外部资源的依赖而超时或出错。这将产生与sproc不同的结果集。

4: DB选择?然后调用API (然后插入)将给您带来锁定和事务问题,而不是简单的解决方案。

5:您的解决方案中已经有了一个.Net层( webapi),因此您有了支持windows服务或类似应用程序的基础设施,这些应用程序可以完成业务角色。

我想,你的问题中缺少的东西,使我能够得到一个更好的模式,是什么叫sproc在第一?

就像我所知道的那样,在第一点上做一个快速的扩展是有争议的。我在很多公司工作过,我倾向于看到两种类型的系统。

最初由DBA创建的系统。它们通常有大量的SQL Agent作业、带有case语句、循环和业务逻辑、SSIS包等的大型链式机

最初由程序员创建的系统。它们通常没有索引或键、xml列等,DB仅用于对象的持久性。

DBA创建的系统崩溃是因为它们不扩展

程序员系统会得到损坏的数据,但仍在苦苦挣扎。因为您总是可以添加另一个web框。

票数 1
EN

Software Engineering用户

发布于 2015-12-12 11:55:05

根据Ewan的答复,我可以提出一种不用CLR来完成您的工作的方法:

1)创建作业(windows服务、计划任务运行的应用程序等)检查是否需要额外的数据。

2)通过调用Web.API从作业中获取数据

3)在工作中做好你的处理。如果逻辑是复杂的,C#比SQL要好得多。

4)保存工作中的数据。为了获得更好的性能,可以使用BulkInsert实现持久性。

像C++、C#、Java这样的高级语言几乎总是更适合用于定义业务逻辑。它们在迭代情况下执行得更好,允许OOP,高级日志记录,异常管理,调试等。

如果迁移存储过程不是一个选项,则仍然可以完成您的工作:

3)将获取的数据持久化到具有处理会话标识符的缓冲表中。如果获取的数据量很大,则批量插入是您的朋友。

4)使用处理会话标识符调用过程。该过程将从缓冲表中获取数据。

5)如果数据量很大,则可以在低使用率期间清空(截断)缓冲表,因为删除对性能有很大影响。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/283056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档