0

我正在使用 ADF 函数活动在数据工厂管道中调用 http 触发的 Azure 函数应用程序。它在调试模式下成功执行,但是当我发布该管道并使用数据工厂触发器运行相同的代码时,我得到以下错误-

{
    "errorCode": "3600",
    "message": "Object reference not set to an instance of an object.",
    "failureType": "UserError",
    "target": "AzureFunction"
}

如果我需要进行一些额外的属性更改或者我在这里遗漏了任何东西,请告诉我。当我通过 ADF 中的函数活动调用函数应用程序时,还有什么方法可以查看生成的 URL。

我尝试使用 ADF 中的 Web 活动调用相同的函数应用程序,并且在调试和触发模式下都可以正常工作。

Azure 功能的链接服务代码

{
    "name": "linkedservicesAzureFunctions",
    "type": "Microsoft.DataFactory/factories/linkedservices",
    "properties": {
        "typeProperties": {
            "functionAppUrl": "https://xyz.azurewebsites.net",
            "functionKey": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "type": "LinkedServiceReference",
                    "referenceName": "linkedservicesKeyVault"
                },
                "secretName": "functions-host-key-default"
            }
        },
        "type": "AzureFunction"
    }
}
4

1 回答 1

1

Azure 数据工厂中有一个已知的错误,他们正在解决这个问题。现在,如果您使用 .NET SDK 创建 Azure 数据工厂,那么您需要在 Azure 函数活动中像这样设置标头。

new AzureFunctionActivity
                {
                    Name = "CopyFromBlobToSnowFlake",
                    LinkedServiceName = new LinkedServiceReference(pipelineStructure.AzureFunctionLinkedService),
                    Method = "POST",
                    Body = body,
                    FunctionName = "LoadBlobsIntoSnowFlake",
                    Headers = new Dictionary<string, string>{ },
                    DependsOn = new List<ActivityDependency>
                    {
                        new ActivityDependency{
                            Activity = "CopyFromOPSqlServerToBlob",
                            DependencyConditions= new List<string>{"Succeeded" }
                        }
                    }
                }

如果您通过 UI 创建 Azure Function Activity,则只需更新 Activity 的描述,然后 Publish 和 Headers 将自动初始化。

于 2019-07-01T07:38:53.640 回答