如何在 Azure Function 隔离进程中访问服务总线消息的 ApplicationProperties?

How can I access the ApplicationProperties of a service bus message in a Azure Function isolated process?

我有一条服务总线消息,其中添加了一些 ApplicationProperties

ServiceBusMessage serviceBusMessage
serviceBusMessage.ApplicationProperties.Add("TenantId", tenantId);
serviceBusMessage.ApplicationProperties.Add("Serialization", "JSON");

我需要从我的 Azure 函数访问这些。在 class library style function app I can use ServiceBusReceivedMessage but there doesn't seem to be an equivalent in out of proc?

经过大量挖掘,我意识到 a) 包含 FunctionContext class.

的函数有重载

所以我的函数具有以下签名:

[Function("ExternalProviderChanged")]
        public void ExternalProviderChanged([ServiceBusTrigger("topic",
            "subscription",
            Connection = "ServiceBus")]
            string myQueueItem, FunctionContext context)

和 b) 在 FunctionContext 中,应用程序设置可用,但相当隐蔽。函数上下文公开了以下 context.BindingContext.BindingData,这是一个 context.BindingContext.BindingData。在这本词典中有一个 属性 UserProperties(是的旧名称,而不是 MS 更改的名称)并且 属性 包含 JSON 格式的 ApplicationProperties。所以为了让我得到 属性 x 我必须这样做:

IReadOnlyDictionary<string, object> bindingData = context.BindingContext.BindingData;

if (bindingData.ContainsKey("UserProperties") == false)
{
    throw new Exception("Service bus message is missing UserProperties binding data");
}

string userPropertiesStr = bindingData["UserProperties"].ToString();
if (string.IsNullOrEmpty(userPropertiesStr))
{
    throw new Exception("UserProperties is null or empty");
}

JsonDocument json = JsonDocument.Parse(userPropertiesStr);
JsonElement xProp = json.RootElement.GetProperty("x");
string x = serializationProp.GetString();