词典未在 wcf 服务中更新
dictionary is not updating in wcf service
所以,我有一个非常简单的 WCF 客户端-服务器应用程序。问题是,该服务从客户端获取消息,它还接收待处理的消息请求。但是,它不会 return 向客户端发送消息。相反,它显示了这部分:
待处理的消息不包含键 {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}");
}
这是因为处理 GetMessages
的实例与处理 SendMessage
的实例不同,并且您将消息存储在服务对象的局部变量中,因此服务实例不同 class 有不同 pendingMessages
.
如果您真的想对服务的单个实例进行所有调用,您应该更改服务行为。只需将此属性添加到您的服务
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
之后,您的服务的一个实例将用于所有来电。
如果您想了解更多信息,请阅读 this。
所以,我有一个非常简单的 WCF 客户端-服务器应用程序。问题是,该服务从客户端获取消息,它还接收待处理的消息请求。但是,它不会 return 向客户端发送消息。相反,它显示了这部分: 待处理的消息不包含键 {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}");
}
这是因为处理 GetMessages
的实例与处理 SendMessage
的实例不同,并且您将消息存储在服务对象的局部变量中,因此服务实例不同 class 有不同 pendingMessages
.
如果您真的想对服务的单个实例进行所有调用,您应该更改服务行为。只需将此属性添加到您的服务
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
之后,您的服务的一个实例将用于所有来电。
如果您想了解更多信息,请阅读 this。