簡體   English   中英

wcf服務中的字典未更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM