You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell调用Azure Durable Function Async HTTP API?是否有高层客户端无需轮询

调用Azure Durable Function异步HTTP API的PowerShell解决方案

1. 利用.NET SDK间接实现高层客户端体验

目前没有官方原生的PowerShell高层客户端,但可以通过PowerShell调用Azure Durable Functions的.NET客户端库,实现等待执行完成并直接获取输出的效果。示例代码如下:

# 加载依赖的.NET程序集(需先安装Microsoft.Azure.WebJobs.Extensions.DurableTask NuGet包)
Add-Type -Path "C:\path\to\Microsoft.Azure.WebJobs.Extensions.DurableTask.dll"
Add-Type -Path "C:\path\to\Newtonsoft.Json.dll"

# 初始化客户端
$httpClient = New-Object System.Net.Http.HttpClient
$durableClient = New-Object Microsoft.Azure.WebJobs.Extensions.DurableTask.DurableHttpClient($httpClient)

# 触发编排函数并等待完成
$functionUrl = "https://your-function-app.azurewebsites.net/api/orchestrators/YourOrchestrator"
$orchestrationResponse = $durableClient.CreateCheckStatusResponseAsync(
    [System.Net.Http.HttpMethod]::Post,
    $functionUrl,
    $null
).GetAwaiter().GetResult()

$orchestrationId = $orchestrationResponse.Headers.GetValues("Location")[0].Split('/')[-1]
$statusResult = $durableClient.WaitForCompletionOrCreateCheckStatusResponseAsync(
    [System.Net.Http.HttpRequestMessage]::new([System.Net.Http.HttpMethod]::Get, $functionUrl),
    $orchestrationId,
    [System.TimeSpan]::FromMinutes(5)
).GetAwaiter().GetResult()

# 读取输出
$output = $statusResult.Content.ReadAsStringAsync().GetAwaiter().GetResult()
Write-Output "函数输出: $output"

注意:这种方式需要手动管理.NET程序集依赖,适合熟悉.NET生态的场景。

2. 自行实现轻量轮询逻辑

如果不想依赖.NET SDK,直接用PowerShell原生命令实现轮询也很简洁,代码示例:

# 触发异步编排函数
$orchestratorUrl = "https://your-function-app.azurewebsites.net/api/orchestrators/YourOrchestrator"
$triggerResponse = Invoke-RestMethod -Uri $orchestratorUrl -Method Post -ContentType "application/json" -Body '{"input": "your-input"}'

# 提取状态查询URL
$statusUrl = $triggerResponse.statusQueryGetUri

# 轮询直到函数进入终态
do {
    Start-Sleep -Seconds 5
    $statusResponse = Invoke-RestMethod -Uri $statusUrl -Method Get
    Write-Output "当前状态: $($statusResponse.runtimeStatus)"
} while ($statusResponse.runtimeStatus -notin @("Completed", "Failed", "Terminated"))

# 输出结果
if ($statusResponse.runtimeStatus -eq "Completed") {
    Write-Output "函数执行完成,输出: $($statusResponse.output)"
} else {
    Write-Error "函数执行失败,状态: $($statusResponse.runtimeStatus),原因: $($statusResponse.failureReason)"
}

这种方式轻量化、无额外依赖,适合大多数PowerShell使用场景。


内容的提问来源于stack exchange,提问作者sschoof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:37:23