Я не могу понять эту ошибку, потому что когда отладчик подключен, похоже, что это не происходит. Ниже приведен код.
Это сервер WCF в службе Windows. Метод NotifySubscribers вызывается службой всякий раз, когда есть событие данных (случайные интервалы, но не очень часто - около 800 раз в день).
Когда клиент Windows Forms подписывается, идентификатор абонента добавляется в словарь подписчиков, а когда клиент отказывается от подписки, он удаляется из словаря. Ошибка возникает, когда (или после) клиент не подписывается. Похоже, что в следующий раз, когда вызывается метод NotifySubscribers(), цикл foreach() завершается с ошибкой в строке темы. Метод записывает ошибку в журнал приложений, как показано в приведенном ниже коде. Когда отладчик подключен и клиент не подписывается, код выполняет штраф.
Вы видите проблему с этим кодом? Должен ли я сделать словарь потокобезопасным?
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class SubscriptionServer : ISubscriptionServer
{
    private static IDictionary<Guid, Subscriber> subscribers;
    public SubscriptionServer()
    {            
        subscribers = new Dictionary<Guid, Subscriber>();
    }
    public void NotifySubscribers(DataRecord sr)
    {
        foreach(Subscriber s in subscribers.Values)
        {
            try
            {
                s.Callback.SignalData(sr);
            }
            catch (Exception e)
            {
                DCS.WriteToApplicationLog(e.Message, 
                  System.Diagnostics.EventLogEntryType.Error);
                UnsubscribeEvent(s.ClientId);
            }
        }
    }
    public Guid SubscribeEvent(string clientDescription)
    {
        Subscriber subscriber = new Subscriber();
        subscriber.Callback = OperationContext.Current.
                GetCallbackChannel<IDCSCallback>();
        subscribers.Add(subscriber.ClientId, subscriber);
        return subscriber.ClientId;
    }
    public void UnsubscribeEvent(Guid clientId)
    {
        try
        {
            subscribers.Remove(clientId);
        }
        catch(Exception e)
        {
            System.Diagnostics.Debug.WriteLine("Unsubscribe Error " + 
                    e.Message);
        }
    }
}
