如何通过.NET Core代码结合Azure SHIR向ADF管道上传本地文件
解决方案
核心逻辑说明
你要完成的不是直接把文件“上传到管道”,而是通过两个核心动作实现需求:
- 用.NET Core代码将目标文件写入SHIR所在笔记本的指定本地文件夹(该文件夹是你ADF管道源数据集配置的路径)
- 调用Azure Data Factory的API触发管道运行,让管道通过SHIR读取该文件夹的文件并复制到Blob存储
步骤1:确认前置配置
- 确保ADF管道的源数据集已指向SHIR所在笔记本的本地文件夹,且SHIR已关联到该数据集对应的链接服务
- 确认ADF管道的目标数据集已正确配置为Azure Blob存储的目标容器和路径
- 确保你的.NET Core程序所在环境能访问SHIR所在笔记本的目标文件夹:如果程序和SHIR在同一机器,直接用本地路径;不在同一机器则需通过网络共享(如SMB)访问
步骤2:.NET Core代码实现流程
2.1 将文件写入SHIR可访问的目录
根据程序和SHIR的部署位置,选择本地路径或网络共享路径写入文件:
using System.IO; // SHIR所在机器的目标文件夹路径(本地或网络共享路径) string shirTargetPath = @"D:\ADF_Input_Files"; // 待上传的本地文件路径 string localFilePath = @"C:\Your_Files\sales_data.csv"; // 确保目标目录存在 Directory.CreateDirectory(shirTargetPath); // 复制文件到SHIR可访问的目录 string destFilePath = Path.Combine(shirTargetPath, Path.GetFileName(localFilePath)); File.Copy(localFilePath, destFilePath, overwrite: true);
2.2 调用ADF API触发管道执行
首先安装NuGet包:Install-Package Azure.DataFactory,然后用以下代码触发管道:
using Azure.Identity; using Azure.ResourceManager.DataFactory; using Azure.ResourceManager.DataFactory.Models; // 你的ADF资源信息 string subscriptionId = "你的订阅ID"; string resourceGroupName = "你的资源组名称"; string dataFactoryName = "你的ADF实例名称"; string pipelineName = "要触发的管道名称"; // 创建ADF管理客户端(用默认Azure凭据,如本地开发用Azure CLI登录凭据) var adfClient = new DataFactoryManagementClient(new DefaultAzureCredential()) { SubscriptionId = subscriptionId }; // 若管道需要传递参数(比如动态指定文件名),可在这里配置 var runParams = new CreateRunParameters { Parameters = new Dictionary<string, object> { // ["TargetFileName"] = "sales_data_2024.csv" } }; // 触发管道运行 var runResult = await adfClient.Pipelines.CreateRunWithHttpMessagesAsync( resourceGroupName, dataFactoryName, pipelineName, runParams); Console.WriteLine($"管道已触发,运行ID:{runResult.Body.RunId}");
注意事项
- 权限配置:运行.NET程序的身份需要具备:
- SHIR所在文件夹的读写权限(本地用户权限或SMB共享权限)
- Azure中ADF的管道触发权限(推荐使用托管标识或服务主体,避免硬编码密钥)
- 文件唯一性:若要避免重复文件,可在写入前检查目标路径是否存在同名文件,或生成带时间戳的唯一文件名
- 运行状态验证:如果需要确认管道执行结果,可在触发后调用ADF API查询管道运行状态
- SHIR可用性:确保SHIR处于运行状态且能正常连接到Azure Data Factory
内容的提问来源于stack exchange,提问作者ABC DEF
相关产品推荐
相关产品推荐

