C# 是否将Azure队列代理消息标记为已成功处理?

C# 是否将Azure队列代理消息标记为已成功处理?,c#,azure,C#,Azure,我以工作者角色接收队列消息,但当我尝试将BrokeredMessage标记为完成时。我得到以下错误: Client.OnMessage((receivedMessage) => { try { FileContainer fileInfoObj = receivedMessage.GetBody<FileContainer>(); //Message proce

我以工作者角色接收队列消息,但当我尝试将
BrokeredMessage
标记为完成时。我得到以下错误:

Client.OnMessage((receivedMessage) =>
    {
        try
        {
            FileContainer fileInfoObj = receivedMessage.GetBody<FileContainer>();               
            //Message processing code               

            receivedMessage.Complete();                           

        }
        catch
        {
            receivedMessage.DeadLetter();
        }
    });
Client.OnMessage((receivedMessage)=>
{
尝试
{
FileContainer fileInfoObj=receivedMessage.GetBody();
//消息处理代码
receivedMessage.Complete();
}
抓住
{
receivedMessage.DeadLetter();
}
});
提供的锁无效。锁已过期,或者消息已过期 已从队列中删除


我遗漏了什么吗?

根据Mike Z的评论,在创建队列时设置(默认值为1,最长可达5分钟),以防止超时

QueueDescription qd = new QueueDescription("MyQueue");
qd.LockDuration = ...

if (!namespaceManager.QueueExists("MyQueue"))
{
    namespaceManager.CreateQueue(qd);
}
此外,用于防止在长时间过程中超时:

receivedMessage.RenewLock()
从这里开始:

信息处理代码需要多长时间?锁有一个过期时间。默认超时为1分钟。使用
QueueDescription.LockDuration
更改它。