2017-10-16 86 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