我将BrokeredMessage标记为Complete时遇到问题.
简单的代码,按预期工作:
private void OnMessageArrived(BrokeredMessage message)
{
var myObj= message.GetBody<MyObject>();
//do things with myObj
message.Complete();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试等待用户完成myObj时,我得到异常:
已经处理了breakredmessage
代码如下:
private Dictionary<long, BrokeredMessage> ReceivedMessages;
ReceivedMessages = new Dictionary<long, BrokeredMessage>();
private void OnMessageArrived(BrokeredMessage message)
{
var myObj= message.GetBody<MyObject>();
ReceivedMessages.Add(myObj.Id, message);
//do things with myObj
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// get myObj on which user clicked
ReceivedMessages[myObj.Id].Complete();
ReceivedMessages.Remove(myObj.Id);
}
Run Code Online (Sandbox Code Playgroud)
对我来说,看起来ServiceBus在某种程度上失去了与c#中实际对象的连接
类似于EF中的分离对象的东西,只是在这种情况下,对象与ServiceBus分离
编辑:
只有在用户点击按钮后才能将消息标记为完成,这一点非常重要.如果AC关闭(或类似的事情),我希望消息仍然保留在服务总线主题上,以便下次用户启动应用程序时,他将再次接收他未处理的消息.
如果我有对象,让它们称为Group,其中包含一些其他对象的列表,我将其称为Brand,并且该对象具有一个名为Model的对象列表。
有没有办法只获取使用 MongoDb c# 驱动程序的模型列表。
我多次尝试使用SelectMany但没有成功。如果我放了多个SelectMany,我总是得到一个空列表。
代码应该是不言自明的。最后是解释什么让我感到困惑的评论。
class Group
{
[BsonId(IdGenerator = typeof(GuidGenerator))]
public Guid ID { get; set; }
public string Name { get; set; }
public List<Brand> Brands { get; set; }
}
class Brand
{
public string Name { get; set; }
public List<Model> Models { get; set; }
}
class Model
{
public string Name { get; set; }
public int Produced { get; …Run Code Online (Sandbox Code Playgroud)