Azure Service Bus支持内置的重试机制,该机制使被放弃的消息立即可见以进行另一次读取尝试.我正在尝试使用此机制来处理一些瞬态错误,但消息在被放弃后立即可用.
我想做的是让信息在被放弃后的一段时间内不可见,最好是基于指数递增的策略.
我ScheduledEnqueueTimeUtc在放弃消息时尝试设置属性,但似乎没有效果:
var messagingFactory = MessagingFactory.CreateFromConnectionString(...);
var receiver = messagingFactory.CreateMessageReceiver("test-queue");
receiver.OnMessageAsync(async brokeredMessage =>
{
await brokeredMessage.AbandonAsync(
new Dictionary<string, object>
{
{ "ScheduledEnqueueTimeUtc", DateTime.UtcNow.AddSeconds(30) }
});
}
});
Run Code Online (Sandbox Code Playgroud)
我已经考虑过根本不放弃消息而只是让锁过期,但是这需要一些方法来影响MessageReceiver指定消息的锁定持续时间的方式,而我在API中找不到任何东西让我改变这个价值.此外,在已经需要锁定之前,将无法读取消息的传递计数(因此决定等待下一次重试的时间).
消息总线中的重试策略是否可以以某种方式受到影响,还是可以通过其他方式人为引入延迟?
假设我有两个可以为空的整数:
int? a = 10;
int? b = 20;
Run Code Online (Sandbox Code Playgroud)
我想取最大的非null值,这样如果两个值都为null,则结果为null.
我可以写一些啰嗦的东西,例如:
int? max;
if (a == null)
{
max = b;
}
else if (b == null)
{
max = a;
}
else
{
max = a > b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)
对于我的喜好,这感觉有点太笨重(并且可能容易出错).返回更大值的最简单方法是什么,这也是空值的可能性?
我在不同的公司中使用不同版本的.NET编写的许多遗留系统,我不断寻找以下模式的示例:
public void FooBar()
{
object foo = null;
object bar = null;
try
{
foo = new object();
bar = new object();
// Code which throws exception.
}
finally
{
// Destroying objects
foo = null;
bar = null;
}
}
Run Code Online (Sandbox Code Playgroud)
对于任何知道内存管理在.NET中如何工作的人来说,这种代码是非常不必要的; 垃圾收集器不需要您手动分配null以告知可以收集旧对象,也不需要分配null指示GC立即收集对象.
这种模式只是噪声,使得理解代码试图实现的内容变得更加困难.
那么,为什么我一直在寻找这种模式呢?是否有一所学校教授这种做法?是否有一种语言,null需要为本地范围的变量赋值才能正确管理内存?明确指定null我还没有得到一些额外的价值吗?
我了解Azure Service Bus具有重复的邮件检测功能,该功能将删除它认为与其他邮件重复的邮件.我想使用此功能来帮助防止一些重复传递.
我很好奇的是服务如何确定两条消息实际上是重复的:
我正在使用消息协定模型生成WCF服务.
我创建了一个通用的请求消息合同,如下所示:
[MessageContract]
public Request<T>
{
[MessageBodyMember]
public T Details { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我习惯用它[DataContract(Name="Contract{0}")]来生成通用数据契约的可读名称,但这种方法似乎对我使用消息契约不起作用.
有没有办法使用消息合同模型实现相同的行为?
我有一个自定义属性,在我的自定义属性的构造函数中我想将我的属性的属性值设置为我的属性应用于的属性的类型,是否有某种程度来访问该属性应用于的成员从我的属性类里面?
我正在尝试在Excel加载项中添加自定义任务窗格,该加载项旨在与"数据透视表"窗格类似地工作.
目的是当选择表时,自定义窗格应该出现并且应该消失.为此,我创建了一个自定义任务窗格:
this._taskPane = Globals.AddIn.CustomTaskPanes.Add(
new TableTaskPane(),
"FooPane");
this._taskPane.DockPositionRestrict
= MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal;
Run Code Online (Sandbox Code Playgroud)
选择表格后,窗格将变为可见,取消选择后,窗格将被隐藏:
ListObject table = AddTable(); // Creates the table and populates with data.
table.Selected += range => this._taskPane.Visible = true;
table.Deselected += range => this._taskPane.Visible = false;
Run Code Online (Sandbox Code Playgroud)
这实现了显示和隐藏窗格的效果,但遗憾的是在UI中产生一些延迟,其中当任务窗格在可见性状态之间转换时,光标在单元之间"反弹".
这似乎是因为Visible属性的setter 阻塞,直到任务窗格完成转换.在Excel 2013中,它从窗口侧面滑出,大约需要500毫秒.
我看不到任何改变这种行为的方法 - 我已经尝试在STA线程上安排属性设置,但它会导致相同的阻塞.我很乐意更改任务窗格,以便它在没有转换的情况下立即显示(如数据透视表窗格),但我也看不到任何可能发生的事情.
我做错了吗?有没有办法通过直接COM或其他一些隐藏的行为来解决这个问题?
我从Apple收到以下电子邮件:
您现在可以
使用Apple的命令行传送工具Transporter 将应用程序的应用程序内购买和游戏中心元数据传送到App Store.要使用
Transporter进行交付,您必须使用App Store软件包,这些软件包是包含应用程序的应用程序内购买和游戏中心元数据和资产的目录.您还可以使用Transporter查找现有应用程序的元数据,以便
以正确的XML格式检索数据.这可以帮助您熟悉
XML格式,并使您更容易更新应用程序内购买和游戏中心
元数据.要了解有关App Store软件包的更多信息,包括如何创建它们,请参阅
可从
iTunes Connect上的管理您的应用程序模块下载的应用程序元数据规范文档.有关下载和安装Transporter的其他信息,请参阅
可从
iTunes Connect上的管理您的应用程序模块下载的" Transporter用户指南" .
我想将我们的元数据看作XML,但无论是在iTunes Connect还是在开发人员中心,我找不到任何下载该工具的链接.这个工具在哪里?
在"内部部署"世界中,在创建类似Windows服务的应用程序时,我经常使用App.config文件来存储有关应用程序的各种配置信息,从数据库连接字符串到WCF端点信息.
在Azure Worker Role世界中,我现在看到.cscfg文件,据说包含"为角色"的信息.
我不明白这些文件是否用于补充应用程序的配置,或完全替换App.config文件.这两个文件如何配置Azure Worker角色?
我正在尝试使用他们的Office 365帐户对我的站点的用户进行身份验证,因此我一直遵循使用OWIN OpenID Connect中间件添加身份验证的指导,并成功管理以验证和检索其配置文件.
我现在正在尝试获取用户的电子邮件地址(因此我可以使用他们的联系人详细信息填充他们的系统帐户),但我似乎无法收到电子邮件索赔.我尝试使用作用域发出请求openid profile email,但声明集不包含任何邮件信息.
有没有办法通过OpenID Connect端点从Azure AD获取用户的电子邮件?