在 Azure 逻辑应用程序中反序列化 ServiceBus 内容

2023-11-23

我正在尝试读取 Azure 逻辑应用程序中消息的内容正文,但没有取得太大成功。我看到很多建议都说主体是base64编码的,并建议使用以下内容进行解码:

@{json(base64ToString(triggerBody()?['ContentData']))}

The base64ToString(...)部分将内容正确解码为字符串,但该字符串似乎在开头包含带有一些额外序列化信息的前缀:

@string3http://schemas.microsoft.com/2003/10/Serialization/�3{"Foo":"Bar"}

该字符串中还有一些额外的字符未显示在我的浏览器中。所以json(...)函数不接受输入,而是给出错误。

模板无效。无法处理模板语言表达式 操作“HTTP”在第“1”行和“2451”列输入:“模板 语言函数“json”参数无效。提供的值@string3http://schemas.microsoft.com/2003/10/Serialization/�3{"Foo":"bar" }无法解析:Unexpected character encountered while parsing value: @. Path '', line 0, position 0.。请参见https://aka.ms/logicexpressions#json了解使用详情。

作为参考,消息使用 .NET 服务总线客户端添加到主题(客户端应该不重要,但这看起来相当 C# 风格):

await TopicClient.SendAsync(new BrokeredMessage(JsonConvert.SerializeObject(item)));

如何在我的逻辑应用程序中将其正确读取为 JSON 对象?


This is由消息在 ServiceBus 上的放置方式(特别是 C# 代码中的放置方式)引起。我使用以下代码添加新消息:

var json = JsonConvert.SerializeObject(item);
var message = new BrokeredMessage(json);
await TopicClient.SendAsync(message);

这段代码看起来不错,并且在不同的 C# 服务之间工作没有问题。问题是由以下方式引起的BrokeredMessage(Object)构造函数序列化给它的有效负载:

使用带有二进制 XmlDictionaryWriter 的 DataContractSerializer 从给定对象初始化 BrokeredMessage 类的新实例。

这意味着内容被序列化为二进制 XML,这解释了前缀和无法识别的字符。反序列化时,C# 实现会隐藏这一点,并返回您期望的对象,但在使用不同的库(例如 Azure 逻辑应用程序使用的库)时,它会变得明显。

有两种方法可以解决此问题:

  • 确保接收方可以处理二进制 XML 格式的消息
  • 确保发件人实际上使用我们想要的格式,例如JSON。

Paco de la Cruz 的答案处理第一种情况,使用substring, indexOf and lastIndexOf:

@json(substring(base64ToString(triggerBody()?['ContentData']), indexof(base64ToString(triggerBody()?['ContentData']), '{'), add(1, sub(lastindexof(base64ToString(triggerBody()?['ContentData']), '}'), indexof(base64ToString(triggerBody()?['ContentData']), '}')))))

对于第二种情况,从源头上解决问题只需使用BrokeredMessage(Stream)构造函数代替。这样,我们就可以直接控制内容:

var json = JsonConvert.SerializeObject(item);
var bytes = Encoding.UTF8.GetBytes(json);
var stream = new MemoryStream(bytes);
var message = new BrokeredMessage(stream, true);
await TopicClient.SendAsync(message);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Azure 逻辑应用程序中反序列化 ServiceBus 内容 的相关文章

  • DispatcherTimer 未按时执行

    我正在使用 c 中的 DispatchTimer 编写一个时钟应用程序 但由于某些原因 我的时钟似乎时不时地跳过 1 秒 例如 52 秒 gt 54 秒 跳过 53 秒 在我看来 计时器并不是每秒都执行一次 DispatcherTimer
  • C 中的变量定义是什么意思[重复]

    这个问题在这里已经有答案了 你们能告诉我 这在 C 中意味着什么吗 define Privileged Data Privileged Data static int dVariable 编译器对变量进行寻址有特殊意义吗 这只是一个宏Pri
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • dyld 缓存“/System/Library/dyld/dyld_shared_cache_x86_64h”未加载:将缓存映射到共享区域的系统调用失败

    我在尝试使用 python 3 时遇到此错误 如何解决此问题 dyld 2675 dyld 缓存 System Library dyld dyld shared cache x86 64h 未加载 系统调用 将缓存映射到共享区域失败 dyl
  • Spring注入需要默认构造函数吗?

    我正在尝试注入一个带有一些参数的构造函数 编译 Spring 后抱怨找不到默认构造函数 我还没有定义它 并抛出 BeanInstatiationException 和 NoSuchMethodException 定义默认构造函数后 异常不再
  • 精简的 JavaScript 代码会提高性能吗?

    我正在做一个AIR应用程序 因此下载时间不会产生巨大影响 组合和缩小所有 JavaScript 文件是否会影响性能 混淆会如何影响性能 缩小通过减少加载时间 即使只是轻微 来提高页面的整体性能 缩小或混淆都不会以任何可感知的量改变执行时间适
  • Java |= 运算符问题[重复]

    这个问题在这里已经有答案了 我需要关于这个奇怪的操作员的帮助 你能向我解释一下这段代码的作用吗 Override public boolean addAll Collection
  • Jenkins Pull Request 构建器忽略带有 ${sha1} 的分支

    我正在尝试设置Jenkins PR 构建器插件在新的拉取请求上点击 github 我已经按照文档进行操作 并尝试了 许多 不同的配置 但我似乎无法克服这一点 忽略 refs heads jenkins testing 因为它与任何配置的 r
  • xargs:以并行模式将标准输出重定向到文件时丢失输出

    我在并行模式下使用 GNU xargs 版本 4 2 2 并且在重定向到文件时似乎确实会丢失输出 当重定向到管道时 它似乎工作正常 以下 shell 命令演示了最小 完整且可验证的示例的问题 我使用生成 2550 个数字xargs将其分成
  • 图像选择器 flutter web 1.9

    在新的 flutter web 1 9 上寻找图像选择器 我找到了一种方法 但小于 1 9 现在已合并 不知道如何实现此目的 尝试使用 dart html 但无法发布 仅在跑步时 看来对于Flutter web 1 10 dev Unive
  • 创建自定义方法安全表达式的最佳方法

    我正在尝试创建自己的方法安全表达式 我想在其中使用 PreFilter and PostFilter注释 在搜索教程和类似问题时 我发现了两种继续进行的方法 第一个是延长DefaultMethodSecurityExpressionHand
  • ./python:加载共享库时出错:libssl.so.1.1:无法打开共享对象文件:没有这样的文件或目录

    我需要在 Ubuntu 16 04 中尝试使用 openssl 1 1 1 的 python 3 7 python 和 openssl 版本都是预发布的 遵循有关如何统计地将 openssl 链接到 python 的说明以前的帖子 我下载了
  • JavaScript 中有哪些稀疏数组的用例?

    在稀疏数组比 常规 对象更好的情况下 您可以有什么可能的编程用途 我所说的稀疏数组是指 arr Initialize arr 0 W arr 1 T arr 3 F console log arr 0 undefined true cons
  • 嵌套期货未执行

    我遇到了一个奇怪的情况 我正在摆弄CompletableFuture当运行以下代码时 我得到了意想不到的结果 public static void main String args CompletableFuture
  • 计算链表中可能循环的节点数

    问题是这样的 它来自 Sedgwick 的优秀 Java 算法 q 3 54 给定一个指向不包含空链接的单链表中节点的链接 即每个节点要么链接到其自身 要么链接到列表中的另一个节点 确定不同节点的数量 而无需修改任何节点 并且使用不超过常量
  • 使用 Plack 处理多个文件上传

    尝试使用 Plack 处理多个文件上传 My form
  • subprocess.popen 和 subprocess.run 有什么区别

    我是新来的subprocess模块和文档让我想知道两者之间有什么区别subprocess popen and subprocess run 该命令的作用有区别吗 是不是只有比较新的一个 使用哪个更好 subprocess run 在Pyth
  • 在 macOS arm64 架构上使用 x86 库和 OpenMP

    我有一台 MacBook M1 并在我的机器上安装了一个针对 x86 Intel 架构编译的库 我有一些使用 OpenMP 的源代码 我想使用 clang 编译器编译我的代码并将我的可执行文件链接到 x86 库 我可以按照说明编译没有 x8
  • Tensorflow:如何创建 Pascal VOC 风格图像

    我正在致力于在 Tensorflow 中实现语义分割网络 并且我正在尝试弄清楚如何在训练期间写出标签的摘要图像 我想以类似的风格对图像进行编码类分割注释用于 Pascal VOC 数据集 例如 假设我有一个网络 其训练批次大小为 1 有 4
  • 如何查找3个或更多连续字符?

    我正在检查密码 这些功能之一是检查输入的密码是否连续重复 我还没有代码 因为我不知道该怎么做 我找到了这个正则表达式匹配两个或多个非连续的相同字符但它只匹配重复的逗号 以下是场景 5236aaa121 重复模式 因为a连续重复3次 2312
  • 在 PHP 中使用 uasort 访问数组键

    如果有一个相当基本的uasortPHP 中的函数如下所示 uasort arr function a b if a gt b return 1 if a lt b return 1 我尝试排序的数组如下所示 1642 gt 1 9314 g
  • 如何在简单适配器中的 imageview 中显示图像?

    我正在从 JSON 数组获取数据 并且可以在文本视图中显示文本 但在显示图像时遇到问题 这是主要活动 public class test extends ListActivity url to make request private st
  • 在 Azure 逻辑应用程序中反序列化 ServiceBus 内容

    我正在尝试读取 Azure 逻辑应用程序中消息的内容正文 但没有取得太大成功 我看到很多建议都说主体是base64编码的 并建议使用以下内容进行解码 json base64ToString triggerBody ContentData T