如何使用Azure.ResourceManager.DataFactory从C#控制台应用调用Azure Data Factory管道
如何使用Azure.ResourceManager.DataFactory从C#控制台应用调用Azure Data Factory管道
我太懂这种踩坑的感觉了——旧库用不了,GPT给的答案全是过时的,官方文档又绕来绕去找不到重点!别担心,我给你整理了一套用Azure.ResourceManager.DataFactory新库的完整步骤,亲测能用。
先做好准备工作
- 给你的控制台项目安装两个必要的NuGet包:
Azure.ResourceManager.DataFactory和Azure.Identity。前者是操作ADF的核心库,后者用来处理Azure身份验证,不用自己写复杂的密钥逻辑。 - 确保你用来开发/运行程序的账户(或者部署后的托管身份)有足够的权限:至少需要Data Factory Contributor角色,或者单独分配
Microsoft.DataFactory/factories/pipelines/createRun/action这个权限,不然触发管道时会报403错误。 - 本地开发的话,记得先通过Azure CLI或者Visual Studio登录你的Azure账户,这样
Azure.Identity才能自动获取凭据。
完整代码示例
下面是可以直接跑的代码,你只需要替换成自己的订阅ID、资源组、ADF名称和管道名称就行:
using Azure; using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.DataFactory; using Azure.ResourceManager.DataFactory.Models; // 替换成你自己的ADF相关信息 var subscriptionId = "你的Azure订阅ID"; var resourceGroupName = "资源组名称"; var dataFactoryName = "数据工厂名称"; var pipelineName = "要触发的管道名称"; // 初始化ArmClient,用DefaultAzureCredential自动处理身份验证 var armClient = new ArmClient(new DefaultAzureCredential()); try { // 一步步获取到目标数据工厂的资源对象 SubscriptionResource subscription = await armClient.GetSubscriptionAsync(subscriptionId); ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetAsync(resourceGroupName); DataFactoryResource dataFactory = await resourceGroup.GetDataFactories().GetAsync(dataFactoryName); // 准备管道运行参数(如果你的管道不需要参数,直接传null或者空字典就行) var pipelineRunParams = new Dictionary<string, object> { { "InputFilePath", "/data/input.csv" }, { "OutputFilePath", "/data/output.csv" } }; // 获取管道资源并触发运行 DataFactoryPipelineResource pipeline = await dataFactory.GetDataFactoryPipelines().GetAsync(pipelineName); DataFactoryPipelineRun pipelineRun = await pipeline.CreateRunAsync(pipelineRunParams); Console.WriteLine($"管道已成功触发!运行ID: {pipelineRun.RunId}"); // 可选:同步等待管道运行完成并实时输出状态(不需要的话可以删掉这部分) while (true) { await Task.Delay(5000); // 每5秒检查一次状态 Response<DataFactoryPipelineRun> runResponse = await dataFactory.GetDataFactoryPipelineRunAsync(pipelineRun.RunId); var currentRun = runResponse.Value; Console.WriteLine($"当前运行状态: {currentRun.Status}"); // 状态为成功、失败或取消时退出循环 if (currentRun.Status is "Succeeded" or "Failed" or "Cancelled") { break; } } } catch (RequestFailedException ex) { Console.WriteLine($"触发管道时出错: {ex.Message}"); Console.WriteLine($"错误代码: {ex.ErrorCode}"); }
几个关键要点说明
DefaultAzureCredential是真的省心:它会自动适配不同环境——本地开发用你Azure CLI/VS登录的账户,部署到Azure后用托管身份,不用手动配置密钥或者连接字符串。- 权限问题一定要注意:如果运行时报403,先去Azure门户检查你的账户/身份有没有对应的ADF权限,别浪费时间在代码调试上。
- 管道参数可以灵活处理:如果你的管道没有参数,直接给
CreateRunAsync传null就可以;如果有参数,按照管道定义的参数名对应传值就行。 - 等待运行状态的部分是可选的:如果你不需要同步等待管道完成,拿到
RunId之后直接结束程序就行,之后可以去ADF门户查看运行详情。
备注:内容来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

