服务总线连接器和“原始”文本(内容类型)

时间:2017-10-16 15:51:35

标签: azure-logic-apps

确定。

我正在写一个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),我在队列中看到了消息

enter image description here

问题在于,当我的Logic App运行时,它看不到纯文本/ json。

enter image description here

您可以看到它选择了内容类型。

但它本身就是内容。

有没有办法通过此触发器获取原始文本?

注意,文档说:

  

让我们看一下不需要转换的两种内容类型   可以在逻辑应用程序中使用的转换: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一起使用。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.brokeredmessage.-ctor?view=azureservicebus-4.1.1#Microsoft_ServiceBus_Messaging_BrokeredMessage__ctor

在我找到答案后,我找到了这个SOF答案:

Azure Service Bus Serialization Type

1 个答案:

答案 0 :(得分:1)

您可以使用表达式@base64ToString(triggerBody()?['ContentData'])"将其转换为字符串。