数据工厂自定义活动,通过网关

时间:2017-06-28 09:26:36

标签: c# azure ftp azure-data-factory custom-activity

我将直接回答我的问题:是否可以通过数据管理网关连接到Azure数据工厂自定义活动中的on Premise数据集?

用例:

我有一个本地FTP服务器,上面有多个文件,应该定期复制到Azure Blob存储。必须上传文件的决定应基于自定义触发器。因此,我正在构建数据工厂自定义活动,而不是正常的复制活动。只应通过数据管理网关

访问服务器

我创建了一个FTPServer类型链接服务和一个FileShare数据集。我在CustomActivity Pipeline中使用了它作为输入。

在我的自定义活动中,我现在想要连接到输入数据集并获取ftp服务器内文件夹的内容。在这里,我没有前进。我不知道如何连接到ftp服务器。这是我遇到的代码元素:

public IDictionary<string, string> Execute(IEnumerable<LinkedService> linkedServices,IEnumerable<Dataset> datasets,
                                           Activity activity,IActivityLogger logger)
{
    Dataset inputDataset = datasets.Single(dataset => dataset.Name == activity.Inputs.Single().Name);

    FileShareDataset inputTypeProperties = inputDataset.Properties.TypeProperties as FileShareDataset;

    FtpServerLinkedService inputLinkedService = linkedServices.First(linkedService =>
    linkedService.Name == 
    inputDataset.Properties.LinkedServiceName).Properties.TypeProperties
    as FtpServerLinkedService;


    ***//HERE CONNECTION TO FTPSERVER VIA GATEWAY***
}

Microsoft.Azure.Management.DataFactories.Models中有多个网关类,但我找不到使用它们的方法。对我来说,似乎自定义活动可能不支持数据管理网关?如果这是正确的,还有其他方法可去,比如在自定义活动中创建复制活动或类似的东西?或者是唯一可能通过WebRequest直接连接到FTP服务器的解决方案?

1 个答案:

答案 0 :(得分:0)

直接回答:否: - )

您将遇到的问题是执行自定义活动代码的上下文。一旦你创建了你的类来完成一些工作,编译后的DLL就被放置在blob存储(并压缩)中。记住ADF只是一个调用其他Azure服务的编排工具,它没有自己的计算。因此,它指示Azure批处理服务从blob存储中获取DLL并执行代码。这意味着应用程序实际上在批处理服务计算池中的虚拟机上运行。因此,执行基本上与ADF断开连接,并且不知道像数据管理网关(DMG)这样的事情。

也就是说,我理解这里的混淆,因为自定义活动可以检查和使用ADF链接服务配置中的值(上面的代码)。但不是DMG。您真正想要的是一个自定义活动类,以编程方式在它(批处理服务VM)和您的本地网络之间建立VPN连接,然后通过隧道执行一些代码。再次,与ADF断开连接。当然,Azure中永远不允许这样做。为标准VM和虚拟专用网络设置VPN已经足够糟糕了!

那么,该怎么办?我的建议是使用DMG的普通ADF复制活动,首先将blob存储中的所有内容放入。将其称为IN文件夹。一旦有第二个ADF管道并使用自定义活动来检查/排序数据。称它为您的CLEAN文件夹。最后将其传递给下游服务。

或者,让自定义活动直接点击FTP站点,而不是用DMG稀释数据流。

希望这有帮助。