确定。
我正在写一个POC(概念证明)逻辑应用程序。
逻辑应用程序有一个连接到队列的Service Bus连接器。
我正在使用peek / complete / abandon。
我编写了一个客户端应用程序(dotnet c#console app),它将消息写入队列(与逻辑应用程序部分无关)。
我将内容类型设置为“text / plain”。
string payLoad = @"{ ""myid"": ""1000"", ""mymessage"": ""1000 is great"" , ""myboolean"" : ""true"" }";
QueueClient queueClient = /* not seen here */;
brokeredMsg = new BrokeredMessage(payLoad) { ContentType = System.Net.Mime.MediaTypeNames.Text.Plain };
queueClient.Send(brokeredMsg);
现在我使用Service Bus Explorer(4.0.104),我在队列中看到了消息
问题在于,当我的Logic App运行时,它看不到纯文本/ json。
您可以看到它选择了内容类型。
但它本身就是内容。
有没有办法通过此触发器获取原始文本?
注意,文档说:
让我们看一下不需要转换的两种内容类型 可以在逻辑应用程序中使用的转换:application / json和 文本/无格式。
来自: https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-content-type
https://docs.microsoft.com/en-us/azure/connectors/connectors-create-api-servicebus
我的C#控制台app packages.config(与Logic Apps无关,但包括完整性)
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.1.0" targetFramework="net45" />
<package id="WindowsAzure.ServiceBus" version="2.1.4.0" targetFramework="net45" />
</packages>
APPEND:
我需要做两件事才能让它发挥作用
一:
我不得不稍微更改“发件人”代码。
QueueClient queueClient = /* not seen here */;
string ct = System.Net.Mime.MediaTypeNames.Text.Plain;
/* see https://social.msdn.microsoft.com/Forums/en-US/8fbf2391-8440-46db-bb47-648daccf46fd/servicebus-output-json-is-being-wrapped-in-a-xml-header-in-logic-app?forum=azurelogicapps and https://abhishekrlal.com/2012/03/30/formatting-the-content-for-service-bus-messages/ */
string payLoad = @"{ ""myid"": ""1000"", ""mymessage"": ""1000 is great"" , ""myboolean"" : ""true"" }";
brokeredMsg = new BrokeredMessage(new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(Convert.ToString(payLoad))), true) { ContentType = ct };
queueClient.Send(brokeredMsg);
我用了Derek Li给我的暗示。
我接受了他的答案作为答案,但请注意我必须做的比他建议的稍微多一些。上面的代码包含了我更改发件人代码的原因。
简而言之,我使用的BrokeredMessage的构造函数是为我选择一个特定的序列化器。
BrokeredMessage(对象) 从给定对象初始化BrokeredMessage类的新实例 将DataContractSerializer与二进制XmlDictionaryWriter一起使用。
在我找到答案后,我找到了这个SOF答案:
答案 0 :(得分:1)
您可以使用表达式@base64ToString(triggerBody()?['ContentData'])"
将其转换为字符串。