从SSIS调用动作MVC直接在脚本任务SSIS

时间:2016-03-23 15:52:27

标签: c# sql-server asp.net-mvc ssis

我需要启动每月流程来创建预格式化的文本文件。数据源位于数据库表(sql server 2008 R2)中。 有必要对数据执行一些逻辑(ETL),然后写入txt文件。

我找到了2个解决方案。

首先是:使用预定的SSIS,其中我提取,使用脚本任务(c#)内的逻辑转换数据并将结果转储到txt文件

第二个解决方案是: 我可以使用SSIS和脚本任务来调用动作MVC(c#代码并使用WebClient.UploadData)。 在txt文件中的数据提取,转换和结果转储完全在MVC动作中执行。 我认为应该更好地为以下专业人员移动MVC操作中的逻辑:

  • 测试驱动开发

  • 记录(使用log4net)

  • 实体框架

  • 重用WebApp的代码逻辑

  • 未来的sql server迁移可能更简单(dtsx迁移),因为逻辑在SSIS之外

如果所有应用程序逻辑都在WebApp中,我更有信心:我更喜欢仅将SSIS用于大型ETL。

第二种解决方案的缺点是必须执行MVC动作调用的安全管理以避免恶意调用。

问题

您认为最佳解决方案是什么?

内部或外部的逻辑(WebApp MVC)SSIS?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我选择将逻辑放在ASP.NET Web应用程序中的原因与您列出的原因相同。

答案 1 :(得分:0)

我的建议是考虑使用hangfire.io。我认为它是针对此类情况而设计的。 话虽如此,您始终可以使用SSIS来调用MVC操作。出于安全原因,我建议将其设为通过https的发布请求,并提供某种类型的身份验证。如果这是一个长期运行的过程,则可能必须扩展webClient以延长时间。以下代码的功劳归于how-to-change-the-timeout-on-a-net-webclient-object

public class LocalWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        WebRequest w = base.GetWebRequest(uri);
        w.Timeout = 10 * 60 * 1000;//10 minutes
        return w;
    }
}

用法:     使用(var client = new LocalWebClient())      {}