2017-10-16 85 views
0

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

我正在写POC(概念验证)逻辑应用程序。

逻辑应用程序有一个服务总线连接器连线到队列。

我正在使用peek/complete/abandon。

我写了一个将消息写入队列的客户端应用程序(dotnet c#console app)(与逻辑应用程序部分无关)。

我将Content Type设置为“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); 

现在我用服务总线资源管理器(4.0.104),我在队列

enter image description here

的问题是,我的逻辑应用程序运行时,它没有看到平原看到消息-text/JSON。

enter image description here

你可以看到它拿起内容类型。

但是,它本身就是内容。

有没有办法用这个触发器获取原始文本?

注意,该文件说:

让我们来看看在不需要转换或 铸造,你可以在一个逻辑应用程序中使用的两个内容类型:应用程序/ 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#控制台应用程序packages.config(无关的逻辑应用程序,但包括完整性)

<?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> 

附加:

我需要做两件事得到它的工作

一:

我不得不稍微改变“发件人”代码。

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(对象) 使用的DataContractSerializer用二进制的XmlDictionaryWriter通过 初始化从给定对象的BrokeredMessage类的新实例。

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

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

+0

这让我在那里的一半。我正在搞清楚第二部分。 @ string3http://schemas.microsoft.com/2003/10/Serialization/ M{“myid”:“1000”,“mymessage”:“1000 is great”,“myboolean”:“true”} – granadaCoder

+0

我已经附加我的答案,以显示我需要做的除了这个答案。 (强调未来的读者) – granadaCoder