0

我们在 Azure 中构建了一个系统,发现一个 Http 触发的 C# 项目如果在短时间内调用 300 次就会死掉。CSX 文件似乎没有这个限制。因此,创建一个通过 POST 接收字符串并将其放入队列的 csx 非常简单。可悲的是,我们所有的队列都有会话。所以我正在兜圈子,试图找到一种方法来创建带有会话 ID 的消息。文档说诸如“绑定到消息类型以设置会话 ID”之类的内容,但我无法在异步方法中设置 out 参数,也找不到任何类型的示例来说明我正在尝试做的事情。

是否有任何类型的示例代码用于创建 csx 文件,该文件推送到具有会话 ID 的 Azure 服务总线队列?

谢谢

4

1 回答 1

0

好的,所以这记录很差,很难追踪。如果您创建使用 csx 的函数,则 FUNCTIONS_EXTENSION_VERSION 设置为 1。您需要将其设置为 2 或 3 以便在函数上设置会话 ID。然后你需要上传一个function.proj文件。我发现你上传的文件是空的,你只是在设置一个名字。然后你需要把它粘贴进去

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.ServiceBus" Version="5.1.0" />
    </ItemGroup>
</Project>

完成此操作后,您将能够访问所需的 DLL,如下所示:

#r "bin\\Microsoft.Azure.ServiceBus"

using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Queue;

现在您可以为服务总线创建触发器,如果​​您的方法不是异步的,您可以将 Message 设置为输出参数。文档说如果您没有为此属性设置值,则不会发送任何消息,但当然它是一个输出参数,所以您必须这样做。

您可以将字节数组传递给消息正文的构造函数,如下所示:

new Message(Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(requestBody)));

您的消息具有 SessionId 属性。而已。设置 SessionId 就完成了。

于 2020-12-09T20:57:58.300 回答