C#学习教程:在AzureServiceBus上将消息从.NETCore发送器发送到.NET4.6处理程序NETCore控制台应用程序通过Azure服务总线发送消息并在.NET4.6控制台应用程序中接收它。在.NETCore中,我使用Azure的新服务总线客户端作为发送方,但它尚未投入生产(根据他们的自述文件)。https://github.com/Azure/azure-service-bus-dotnet我可以使用示例轻松地从.NETCore发送并使用.NETCore接收。但是,.NET4.6应用程序在订阅主题并收到相同消息时抛出此异常:Microsoft.Azure.WebJobs.Host.FunctionInvocationException:Exceptionwhileexecutionfunction:Functions.ProcessEventSystem.InvalidOperationException:Exceptionbindingparameter'message'ContentType为“string”的BrokeredMessage无法反序列化为带有消息的字符串:“Expectingelement'string'fromnamespace'http://schemas.microsoft.com/2003/10/Serialization/'..Encountered'Element'with名称“base64Binary”,命名空间http://schemas.microsoft.com/2003/10/Serialization/'。'--->System.Runtime.Serialization.SerializationException:期望来自命名空间http://schemas.microsoft.com/2003/10/Serialization/'的元素'string'..遇到名称为'base64Binary'的'Element',命名空间'http://schemas.microsoft.com/2003/10/Serialization/'。System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegatorxmlReader,BooleanverifyObjectName,DataContractResolverdataContractResolver)atSystem.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegatorreader,BooleanverifyObjectName,DataContractResolverdataContractResolver)我的.NETCore发件人代码是:使用Microsoft.Azure.ServiceBus;vartopicServicelient=newTopicClient(");varmsg=newMessage(Encoding.UTF8.GetBytes("Helloworld"));topicClient.SendAsync(msg).Wait();我的.NET4.6接收器代码是:使用Microsoft。Azure.WebJobs;staticvoidMain(){varconfig=newJobHostConfiguration();config.UseTimers();config.UseServiceBus();varhost=newJobHost(config);host.RunAndBlock();}publicvoidProcessEvent([ServiceBusTrigger("topic1","the-same-endpoint-as-connection-string")]stringmessage,TextWriterlogger){Console.Writeline(message);}注意我无法更改接收器,因为它是旧系统我猜问题是因为.NETCore将序列化为JSON的消息发布到主题,但.NET4.6代码尝试使用DataContractSerializer(XML?)反序列化来自订阅的消息,据我所知这是默认设置完整的.Net框架库序列化方法的反序列化。如果是这种情况,你不能修改接收代码,你需要在.NetCore上使用DataContractSerializer序列化消息:varser=newSystem.Runtime.Serialization.DataContractSerializer(typeof(string));varms=newMemoryStream();ser.WriteObject(ms,"helloworld");varmsg=newMessage(ms.ToArray());您需要nuget包System.Runtime.Serialization.Xml听起来像是一个互操作性问题该修复已合并到开发分支中,但尚未发布。预定0.0.7预览里程碑。您可以在GitHub存储库下跟踪它。以上就是C#学习教程的全部内容:在AzureServiceBus上从.NETCoresender向.NET4.6handler发送消息。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
