【发布时间】:2016-04-22 08:31:43
【问题描述】:
所以,我有一个非常简单的 WCF 客户端-服务器应用程序。问题是,服务从客户端获取消息,它还接收待处理的消息请求。但是,它不会向客户端返回消息。相反,它显示了这部分: 未决消息不包含密钥 {id} 虽然 id 很好
private Dictionary<int, List<Message>> pendingMessages =
new Dictionary<int, List<Message>>();
public IEnumerable<Message> GetMessages(int id)
{
Console.WriteLine($"New request from {id}");
List<Message> messages;
if (!pendingMessages.ContainsKey(id))
{
Console.WriteLine($"Pending messages does not contain key {id} ");
return null;
}
messages = pendingMessages[id].ToList();
pendingMessages[id].Clear();
foreach (var msg in messages)
{
Console.WriteLine($"Returned message: ${msg.From}=>{msg.To}:{msg.Body}");
}
return messages;
}
public void SendMessage(Message msg)
{
if (!pendingMessages.ContainsKey(msg.To))
{
pendingMessages.Add(msg.To,new List<Message>());
}
pendingMessages[msg.To].Add(msg);
Console.WriteLine($"{msg.From}=>{msg.To}: {msg.Body}");
}
【问题讨论】:
-
也许接收“SendMessage”请求的实例与接收“GetMessages”请求的实例不同?这么说吧:如果这被证明是字典中的错误,我会惊讶。 (话虽如此,您似乎在没有任何同步的情况下使用它,并且请求可以进入任何线程......考虑 ConcurrentDictionary,或添加锁定。)
-
pendingMessages 是如何定义的?
-
pendingMessages在哪里/如何定义? -
私人词典
> pendingMessages = new Dictionary >();这就是定义。我尝试使用 ConcurrentDictionary 和 ConcurrentBag 而不是 Dictionary 和 List 但我简化了它只是为了找出错误在哪里 -
每次调用服务时,字典都会被重新实例化,所以会是空的。
标签: c# .net wcf dictionary servicebehavior