如何在 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();
我有一条服务总线消息,其中添加了一些 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();