Асинхронная отправка сообщений WCF
Реализовал метод асинхронной отправки сообщений клиентам, но он отправляет это сообщение абсолютно всем, в том числе и самому отправителю.
Как сделать так чтобы сообщение приходило всем кроме отправителя?
public void AddMessage(byte[] message)
{
IAsyncMessageCallback other = OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
other.BeginOnMessageAdded(message, DateTime.Now, delegate (IAsyncResult ar)
{
other.EndOnMessageAdded(ar);
}, null);
}
Попытался сделать вот так, но получаются жутки тормоза при подключении больше двух клиентов и в конце концов разрыв канала передачи( без проверки разрывов ненаблюдалось)
Dictionary<IAsyncMessageCallback, string> subscribers = new Dictionary<IAsyncMessageCallback, string>();
public void Join(string username)
{
var connection = OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
subscribers[connection] = username;
}
public void AddMessage(byte[] message)
{
lock (subscribers)
{
var connection = OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
string user;
if (!subscribers.TryGetValue(connection, out user))
return;
foreach (var other in subscribers.Keys)
{
//Console.WriteLine(other + " " + connection);
if (other == connection)
continue;
Console.WriteLine(other + " " + connection);
other.BeginOnMessageAdded(message, DateTime.Now, delegate (IAsyncResult ar)
{
other.EndOnMessageAdded(ar);
}, null);
Console.WriteLine(message.Length);
}
}
}
Может можно добавить асинхронность к Foreach?
Спасибо.