我正在建立一个系统,我们将在 ServiceBus 主题上的多个内部服务之间传输消息。消息将保存序列化的对象。模型对象被定义为相当复杂的类树。这意味着在代码中维护模型结构的双重版本是不切实际的。
我们预计模型结构会发生变化,因此我将模型版本作为代理消息的属性公开。
当我们需要升级模型版本时,处理过渡的最佳方法是什么?
我不认为我们真的需要支持两个并行模型版本。但我担心我们在过渡期间不会丢失信息。我认为首先升级发送服务并让所有订阅者继续处理消息是一个很好的策略。当之前版本的所有消息都处理完毕后,就到了订阅服务升级的时候了。
跳过侦听服务当前未处理的新版本消息的最佳机制是什么?
我知道我可以回到老方法,通过使用 json 或 xml 模式来定义并行模型版本,从而使监听服务能够处理并行版本。但这会很麻烦,所以我真的想避免这种情况。
我注意到 BrokeredMessage 有一个 Defer 方法。那会有用吗?它看起来很有希望,直到我意识到消息将从实时队列“移动”到一个单独的状态,需要通过按键引用它们来拉取它们。不实用。
是否可以通过修改发送时间来推迟消息?几分钟就可以了。如果到那时相同的服务仍在运行,则可以再次推迟。(如果有工作代码示例,我们将不胜感激!)
我需要根据型号版本创建单独的订阅吗?到目前为止,我们允许不同的消息类型在同一主题上传播,因此需要进行一些重新设计。
我们需要在ServiceBus主题上发送大量消息.目前的大小约为10MB.我们最初的做法是在BlobStorage中保存一个临时文件,然后发送一个参考blob的消息.压缩文件以节省上传时间.它工作正常.
今天我读了这篇文章:http://geekswithblogs.net/asmith/archive/2012/04/10/149275.aspx 建议将消息分成较小的块,然后在接收端再次聚合它们.
我可以承认这是一种"更清洁的方法",避免了往返BlobStore的往返.另一方面,我更喜欢保持简单.分裂机制引入了更高的复杂性.我的意思是他们从一开始就没有把它包括在ServiceBus中的原因一定是这样的...
有没有人尝试过现实生活中的分裂方法?
有更好的模式吗?
我有一个 WPF 应用程序,我在其中使用字体“Segoe UI Symbol”中的图标。但是当部署到 Windows 7 时,我意识到图标丢失了,因为字体在 Windows 8 中更新了。
我尝试按照以下说明在 WPF 应用程序中嵌入字体作为资源:http : //msdn.microsoft.com/en-us/library/ms753303.aspx 但它不起作用。
最初我有:
<TextBlock FontFamily="Segoe UI Symbol">
Run Code Online (Sandbox Code Playgroud)
在 Windows 8 计算机上运行良好。然后我将 seguisym.ttf 添加到目录“_Resources”,然后使用:
<TextBlock FontFamily="./_Resources/#Segoe UI Symbol">
Run Code Online (Sandbox Code Playgroud)
这不适用于 Windows 8 或 Windows 7!我为 BuildAction 尝试了不同的设置:Resource、Embedded Resource 和 Content,但它们都不起作用。
我打算创建一个Windows 8样式应用程序(Metro),但发现不支持使用双屏幕,这是对我的应用程序的需求.
现在我将我的应用程序重新设计为WPF中的桌面应用程序.但我仍然喜欢模仿Windows 8 Apps的一些不错的设计功能.
其中一个设计功能是通常在Windows 8风格的应用程序中使用的飞出栏:
它们共同的设计是一个临时的弹出式面板,它位于当前窗口布局的顶部.
我的问题是:如何在WPF中创建类似的东西?
我没有问题创建一个主网格,其中隐藏的底行是可见的,以显示一些常见的命令按钮.但是让它在我的标准布局上飞出而不是挤压它会很好.
我知道可以在当前打开一个新窗口,但这会产生一个糟糕的代码设计,很难看起来很好看.我宁愿在同一个窗口中这样做.
我使用 ValidationMessageStore 根据此模式验证我的 Blazor 表单输入:
然后我在每个控件上输出 ValidationMessage。
但它是一个很长的表单,所以我还想在靠近提交按钮的地方向用户表明有一些错误需要修复,这就是我们尚未接受输入的原因。
我知道我可以使用 ValidationSummary,但我不想重复所有可能的错误,只需做一个注释。
ValidationMessageStore 显然将所有消息保存在内部集合中,但它们不可访问。是否可以以某种方式检查是否有任何错误消息?
我创建了一个MongoLab沙箱数据库.我与MongoChef连接,它工作正常.
我通过Nuget安装了MongoDB.Driver 2.2.2.
我做了一些简单的C#演示代码,但是没有让它工作.
连接字符串直接从MongoChef复制,它绝对有效!
当尝试使用本地Mongo实例时,我会得到相同的行为.但是当尝试使用驱动程序版本2.1.1时,它可以在本地和MongoLab上运行!在2.2中,内部连接行为是否以某种方式发生了变化?
const string connectionString = "mongodb://user:password@ds047095.mongolab.com:47095/dbname";
var client = new MongoClient(connectionString);
var db = client.GetDatabase("dbname");
var skills = db.GetCollection<Skill>("skill");
skills.InsertOne(new Skill {SkillName = "TEST"});
Run Code Online (Sandbox Code Playgroud)
这是抛出的异常:
使用CompositeServerSelector {Selectors = WritableServerSelector,LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000}}选择服务器30000ms后发生超时.群集状态的客户端视图是{ClusterId:"1",ConnectionMode:"Automatic",类型:"Unknown",状态:"Disconnected",服务器:[{ServerId:"{ClusterId:1,EndPoint:"127.0.0.1: 27017"}",EndPoint:"127.0.0.1:27017",状态:"已断开连接",类型:"未知",HeartbeatException:"MongoDB.Driver.MongoConnectionException:打开与服务器的连接时发生异常.--- > System.MissingMethodException:找不到方法:MongoDB.Driver上的'MongoDB.Bson.BsonDocument MongoDB.Bson.RawBsonDocument.Materialize(MongoDB.Bson.IO.BsonBinaryReaderSettings)'.MongoDB.Driver.Core.WireProtocol.CommandWireProtocol 1.ProcessReply(ConnectionId connectionId, ReplyMessage1 reply) .Core.WireProtocol.CommandWireProtocol`1.d__11.MoveNext()---在抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务). MongoDB.Driver.Core.Connections.ConnectionIniti上的CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)alizer.d__1.MoveNext()---抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处(任务) MongoDB.Driver.Core.Connections.BinaryConnection.d__47.MoveNext()---内部异常堆栈跟踪结束---在MongoDB.Driver.Core.Connections.BinaryConnection.d__47.MoveNext()---结束来自抛出异常的先前位置的堆栈跟踪---在System.Runtime.CompilerServices.TaskAwaiter的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处. MongoDB.Driver.Core.Servers.ClusterableServer.d__42.MoveNext()"}]}中的ValidateEnd(任务任务).