首页 > 解决方案 > Webhook 活动在 ADF V2 中永久运行

问题描述

我想通过运行手册处理我的多维数据集,我在 Power Shell 中编写了代码。我想从 ADF 的 webhook 活动中调用这个运行手册。但是这个活动一直运行到超时并且无法完成,但是它成功地处理了多维数据集触发运行手册。我是否必须编写更多代码才能使其在 ADF 中成功或失败。还是我的配置中缺少其他内容。

标签: powershellwebhooksazure-data-factory-2azure-automation

解决方案


如果您希望 ADF 等到 Runbook 完成,那么 Webhook 活动(就像您正在做的那样)是正确的。但是您的 Runbook 需要使用Azure 自动化 webhook 文档中的 $webhookData 参数来接收 callbackUri 参数。并且 Runbook 需要对 ADF 回调 API 进行 Web 回调,以告知其已完成。

另一方面,如果您不希望 ADF 等待或知道 Runbook 是否失败,则使用 Web Activity 而不是 Webhook Activity。

如果继续使用 ADF Webhook,则需要更改 Azure 自动化运行手册以包含以下参数和解析:

param(
    [object] $WebhookData
)

$ErrorActionPreference = "Stop";

try
{
    #parse the webhook parameters
    if (-Not $WebhookData.RequestBody)
    {
        #we're testing in the test pane
        $WebhookData = ConvertFrom-Json -InputObject $WebhookData
    }
    $WebhookBody = ConvertFrom-Json -InputObject $WebhookData.RequestBody
    [string] $callbackUri = $WebhookBody.callbackUri

    #complete your typical runbook work here...

    if ($callbackUri)
    {
        $null = Invoke-WebRequest -Method Post -Uri $callbackUri -ContentType "application/json" -Body '{"StatusCode": "200"}' -UseBasicParsing
    }

}
catch 
{
    if ($callbackUri)
    {
        $null = Invoke-WebRequest -Method Post -Uri $callbackUri -ContentType "application/json" -Body '{"StatusCode": "500", "Error": {"ErrorCode":100,"Message","$_"}}' -UseBasicParsing
    }
    "Failed: $_"
    throw $_
}

这应该可以解决您认为 Runbook 永远运行的 ADF 问题。


推荐阅读