更新时间:2022-02-14 22:42:31
我怀疑您遇到了版本控制问题,因为您引入的 Storage SDK 版本存在冲突.相反,使用内置的(不带任何 nuget 包).此代码适用于没有 project.json:
I suspect that you're having versioning issues because you're bringing in a conflicting version of the Storage SDK. Instead, use the built in one (w/o bringing in any nuget packages). This code works with no project.json:
#r "Microsoft.WindowsAzure.Storage"
open Microsoft.Azure.WebJobs;
open Microsoft.WindowsAzure.Storage.Queue;
let Run(request: string, customerId: int, userName: string, binder: IBinder) =
async {
let subscriberKey = sprintf "%i-%s" customerId userName
let attribute = new QueueAttribute(subscriberKey)
let! queue = binder.BindAsync<CloudQueue>(attribute) |> Async.AwaitTask
() //TODO: read messages from the queue
} |> Async.RunSynchronously
这将绑定到默认存储帐户(我们在创建函数应用时为您创建的帐户).如果要指向不同的存储帐户,则需要创建一个属性数组,并包含一个指向所需存储帐户的 StorageAccountAttribute
(例如 new StorageAccountAttribute("your_storage")).然后,您将此属性数组(队列属性在数组中的第一个)传递到采用属性数组的 BindAsync
重载中.请参阅此处 了解更多详情.
This will bind to the default storage account (the one we created for you when your Function App was created). If you want to point to a different storage account, you'll need to create an array of attributes, and include a StorageAccountAttribute
that points to your desired storage account (e.g. new StorageAccountAttribute("your_storage")
). You then pass this array of attributes (with the queue attribute first in the array) into the BindAsync
overload that takes an attribute array. See here for more details.
但是,如果您不需要进行任何复杂的解析/格式化来形成队列名称,我认为您甚至不需要为此使用 Binder.您可以完全以声明方式绑定到队列.这是 function.json 和代码:
However, if you don't need to do any sophisticated parsing/formatting to form the queue name, I don't think you even need to use Binder for this. You can bind to the queue completely declaratively. Here's the function.json and code:
{
"bindings": [
{
"type": "httpTrigger",
"name": "request",
"route": "retrieve/{customerId}/{userName}",
"authLevel": "function",
"methods": [
"get"
],
"direction": "in"
},
{
"type": "queue",
"name": "queue",
"queueName": "{customerId}-{userName}",
"connection": "<your_storage>",
"direction": "in"
}
]
}
和函数代码:
#r "Microsoft.WindowsAzure.Storage"
open Microsoft.Azure.WebJobs;
open Microsoft.WindowsAzure.Storage.Queue;
let Run(request: string, queue: CloudQueue) =
async {
() //TODO: read messages from the queue
} |> Async.RunSynchronously