问题标签 [brokeredmessage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - I'm getting extra string char when I use GetBody() for BrokeredMessage but works perfect with GetBody() c#
which gives wrong output with -
When I use below it works perfect -
output - {"MyID":"121"}
why this happens ?
message - Microsoft Azure 服务总线消息已完成
在 .NET Framework 中,Microsoft.ServiceBus.Messaging 有一个用于从服务总线接收消息的类 BrokeredMessage。但是,在 .NET Standard 2.0 中,为了从服务总线接收消息,使用了来自 Microsoft.Azure.ServiceBus.Core 的类 Message。
BrokeredMessage 有一个方法 CompleteAsync(),用于完成消息的接收操作,并指示该消息应标记为已处理并删除。我找不到执行相同操作的 Message 类的方法。你们知道任何解决方案可以将消息标记为已处理并已删除消息类吗?
deserialization - Azure 服务总线中转消息反序列化
我正在使用 WCF NetMessaging 向 ASB 发送消息。该消息可以包含任意数量的自定义数据协定。
我有一个带有自定义侦听器的 Service Fabric 无状态服务,用于 ASB 将消息推送到队列中。我见过的所有示例都只能处理一种类型的消息(似乎大多数指导都是可序列化为 JSON,但这不是我需要在这里做的)。我希望队列的订阅者能够处理许多消息(发送到服务的任何操作的任何消息)。
我可以将 Action 添加到 BrokeredMessage.Properties,这样我就知道将它发送到哪里。问题是我还没有弄清楚如何以任何有效的方式反序列化消息正文。
我可以从流中读取它并将其转换为字符串,但不能这样做: var myDTO = message.GetBody(); 这会引发序列化异常。我还尝试过传入 DataContractSerializer 的变体——尽管我认为这是默认设置。
此外,我真正需要的是一种在不知道正文中数据类型的情况下执行此操作的方法 - 可以想象,我可以添加更多消息。正文中序列化类型的属性,但我认为必须有一种直接的方法仅使用正文中的数据来执行此操作-毕竟 WCF 和类似技术可以轻松执行此操作。但是怎么做?
谢谢你的帮助,威尔
azureservicebus - Azure 消息和 BrokeredMessage 之间的兼容性
我们有两个项目。一种使用 .NET FrameWork,另一种使用 .NET Core。对于 .NET Core,我们必须使用 Azure ServiceBus,对于 .NET Framework,我们必须使用旧的 ServiceBus,因为我们仍在使用 5.4。.NET Framework 接收 BrokeredMessage,.NET Core 发送 Azure 消息。我怎样才能使它兼容?我必须编写自己的序列化程序吗?
c# - System.Runtime.Serialization.SerializationException 从 Azure 服务总线接收消息
我在.Net Framework中有两个单独的应用程序,一个是.Net Core,另一个是.Net Core 。我在 .Net 核心控制台应用程序中创建了一个服务总线发送器。它使用最新和nuget 包向服务总线发送消息。这是发件人的示例代码。Microsoft.Azure.Webjobs
Microsoft.Azure.Webjobs.ServiceBus
用 .NET Framework 4.7 编写的另一个应用程序正在侦听相同的服务总线。它使用 nuget 包Microsoft.Azure.Webjobs
和Microsoft.Azure.Webjobs.ServiceBus
.Net Framework 的 2.3.0 版本。下面的示例代码。
从 .Net 核心控制台应用程序发送消息。另一个应用程序能够检测到该消息,但我var messageBody = message.GetBody<string>();
在侦听器中在线收到以下错误。
执行函数时出现异常:Applications Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时出现异常:Applications ---> System.Runtime.Serialization.SerializationException:反序列化 System.String 类型的对象时出错。输入源的格式不正确。---> System.Xml.XmlException : 输入源格式不正确。
serialization - Azure 服务总线消息反序列化在核心转换中中断
因此,我创建了一个新的 Azure Functions 项目 v3,并正在移植 v1 中在 4.6.2 上运行的函数子集,同时将其余函数作为过时的函数弃用。不幸的是,由于从 Microsoft.ServiceBus.Messaging 更改为 Microsoft.Azure.ServiceBus,从 BrokeredMessage 更改为 Message 时,以下反序列化方法现在失败:
反序列化流类型的对象时出错。输入源的格式不正确。
问题就在错误中,但我不确定正确的新方法是什么,它有点不清楚。
连载
反序列化
目的
.net - .NET 标准消息是否与用于通用消息发送的 .NET Framework BrokeredMessages 有效不兼容?
我可以指出的最好的地方之一就是这个线程:
https://github.com/Azure/azure-service-bus-dotnet/issues/239
(我很少在那个论坛上看到很多解决方案。那个帖子几年前就被关闭了,一旦发生这种情况,你通常可以放弃在那里获得解决方案。)
因此,假设您有一个字符串 - 假设它的值为"test123"
,并且您希望通过 Azure 服务总线将其发送到旧系统,并且该旧系统使用 .NET Framework 和BrokeredMessage
s 来接收所有内容。但是,您需要使用 .NET Standard(或可能的 Core,如有必要),它将您降级为Message
.
这不是开箱即用的,因为一旦完整框架系统收到消息并开始尝试反序列化它,BrokeredMessage
它就会抛出以下异常:
反序列化 System.Byte[] 类型的对象时出错。输入源的格式不正确。`
问题是:在 .NET Standard 中使用Message
s 时,身体的序列化形式通常如下所示:
然而,为了使这项工作BrokeredMessage
开箱即用,它需要看起来更像:
因此,在某种程度上,这可以在 .NET Standard 发送器中通过获取原始字符串 ,"test123"
并手动填充它以使其看起来像 .NET Framework 版本来解决。但是,有多个项目似乎阻碍了这一点:
旧版/完整框架格式中存在难以预测的细微差别。似乎存在问题的主要地方是您
Ö
在上面的第三行中看到的位置 - 该字节的变化方式看起来有点古怪且难以完美预测。这仅适用于字符串。这需要能够使用广泛的泛型(而不仅仅是具有
Serializable
属性的泛型)。到目前为止,我还没有找到任何可以自动将内容转换为旧格式的东西。甚至上面线程上的建议也不完美,并在接收端抛出异常,如下所示:
{“来自命名空间'http://schemas.microsoft.com/2003/10/Serialization/'的预期元素'字符串'..遇到名称为'base64Binary'的'元素',命名空间'http://schemas.microsoft.com /2003/10/序列化/'。"}
- 像这样使用启发式逆向工程既费时又容易出错。
BrokeredMessage
那么当遗留系统使用 .NET Framework 和s时,你会怎么做呢?不仅在我的情况下,在许多其他人的情况下,也不可能调整旧软件以适应更新的 .NET Standard/Core 软件;如果可行的话,必须反过来做。
有没有办法解决这个问题?因此,完整框架和核心/标准系统在一般情况下是否直接不兼容?
万一这很重要,我会用主题来做这件事,但通常我认为它们和队列之间的情况是一样的。
更新
问题的标题被表述为是或否的问题,但我正在寻找一个详细的答案。
如果不是,它们是兼容的,请清楚地解释一个非常可行的方法来使这两者一起工作。如果是,它们不兼容,请提供清晰、可靠的解释。
换句话说,请清楚地解释如何以专业、可行的方式将这两者结合在一起,而不依赖于 20 个额外的怪异依赖或其他东西,或者请解释为什么和/或如何合理地做到这一点。
.net - 是否有关于如何从 BrokeredMessage 序列化/反序列化的开放规范?
这与另一个问题直接相关。在将对象传入和传出使用 s 的 .NET Framework 客户端时BrokeredMessage
,这些BrokeredMessage
s 不只是使用简单的 JSON 或 XML 来序列化这些对象。它似乎是一种更专有的格式。因此,例如,只传递简单的字符串值"test123"
,而不是这样:
你会得到更像这样的东西:
我环顾四周,包括 for 和在http://schemas...
序列化示例中指定的 URL,但没有找到关于如何序列化BrokeredMessage
. 在某种程度上,我已经能够对一种方法进行逆向工程,以Message
在 .NET Standard/CoreBrokeredMessage
中的 s 和 .NET Framework 中的 s 之间发送至少更小的字符串,但这是启发式的,等等。
是否有规范明确说明BrokeredMessage
s 使用的序列化模式是什么?