WCF “Экземпляр уже существует в CounterSet” ошибка при повторном открытии ServiceHost

У меня есть рабочий ServiceHost с единственным NetTcpBinding и единственной конечной точкой.

Я .Close() это. Затем я создаю новый экземпляр ServiceHost с той же самой конфигурацией как первая. Затем когда я пытаюсь .Open() новый экземпляр я получаю это очень неловкое исключение:

System.ArgumentException occurred
  Message=Instance 'LobbyService@net.tcp:||localhost:2718|game|' already exists in CounterSet 'e829b6db-21ab-453b-83c9-d980ec708edd'.
Parameter name: InstanceName
  Source=System.Core
  ParamName=InstanceName
  StackTrace:
       at System.Diagnostics.PerformanceData.CounterSetInstance..ctor(CounterSet counterSetDefined, String instanceName)

Кто-либо видел это прежде? Действительно ли это - ошибка в Платформе.NET (я использую 4.0, между прочим)?

Вероятно, соответствующая информация о моем ServiceHost:

  • Никакие клиенты не подключены к хосту, когда он сначала закрывается;
  • Пользовательское IInstanceProvider используется для создания экземпляров;
  • Привязка ReliableSession включен;
  • Сервисный тип отмечен с ServiceBehavior ниже;

.

[ServiceBehavior(
IncludeExceptionDetailInFaults = true,
InstanceContextMode=InstanceContextMode.PerSession,
ConcurrencyMode=ConcurrencyMode.Reentrant,
UseSynchronizationContext = false
)]

Я открыт для раскрытия любой дополнительной информации, которую Вы могли бы хотеть знать о приложении.

Обновите 1, я скомпилировал приложение, предназначающееся для.NET 3.5, и ошибка НЕ сделала произошел. К сожалению, я должен деактивировать все, что положилось в Task.

Обновите 2, я зарегистрировал ошибку в Microsoft Connect об этой проблеме. Я предполагаю, что на этот вопрос уже отвечают теперь.

12
задан jpbochi 4 June 2010 в 21:23
поделиться

1 ответ

Это ошибка .NET Framework 4.0. Я зарегистрировал ошибку в Microsoft Connect по этому поводу.

Вот ответ от Microsoft:

Похоже, это известная проблема, вызвавшая по тайминговым вопросам при плотном закрытии / открытии последовательность ServiceHost. ServiceHost поддерживает некоторые счетчики производительности это может не получить сборщик мусора что привело к этому исключению. Я предполагаю вы используете .Net Framework 4.0? Пожалуйста, попробуйте обходной путь, выполнив принудительный сборщик мусора перед открытием второго ServiceHost:

GC.Collect() 
GC.WaitForPendingFinalizers()

Выполнение того, что они посоветовали, помогло решить проблему. Я надеюсь, что это будет исправлено в более позднем выпуске.

7
ответ дан 2 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: