Also, ich habe eine sehr einfache WCF-Client-Server-App. Die Sache ist, der Dienst erhält Nachrichten vom Client und er empfängt auch ausstehende Nachrichtenanforderungen. Es gibt jedoch keine Nachricht an den Client zurück. Stattdessen zeigt es dieser Teil: Pending Nachrichten nicht Schlüssel enthält {id} obwohl die IDWörterbuch wird nicht aktualisiert in WCF-Dienst
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}");
}
Vielleicht unterscheidet sich die Instanz, die die Anforderung "SendMessage" empfängt, von der Instanz, die die Anforderung "GetMessages" empfängt? Sagen wir es so: Ich wäre * erstaunt *, wenn sich das im Dictionary als Fehler herausstellen würde. (Nachdem Sie das gesagt haben, scheinen Sie es ohne irgendeine Art von Synchronisation zu verwenden, und Anfragen könnten in jedem Thread eingehen ... berücksichtigen Sie ConcurrentDictionary, oder fügen Sie Sperren hinzu.) –
Wie ist pendingMessages definiert? – DoctorMick
Wo/wie sind "pendingMessages" definiert? – ChrisF