[英]dictionary is not updating in wcf service
因此,我有一個非常簡單的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}");
}
這是因為處理GetMessages
的實例與處理SendMessage
的實例不同,並且您將消息存儲在服務對象的本地變量中,因此服務類的不同實例具有不同的pendingMessages
。
如果您確實要對服務的單個實例進行所有調用,則應更改服務行為。 只需將此屬性添加到您的服務
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
之后,只有一個服務實例可用於所有來電。
如果您想了解更多的閱讀此 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.