我有一个具有单个NetTcpBinding和单个端点的工作ServiceHost。

.Close()它。然后,我使用与第一个实例完全相同的配置创建一个新的ServiceHost实例。然后,当我尝试.Open()新实例时,我遇到了一个非常尴尬的异常:

System.ArgumentException occurred
  Message=Instance '[email protected]:||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 Framework中的错误(顺便说一句,我使用的是4.0)?

有关我的ServiceHost的大概相关信息:


首次关闭主机时,没有客户端连接到该主机;
自定义IInstanceProvider用于创建实例;
绑定的ReliableSession已打开;
服务类型在下面用ServiceBehavior标记;




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


我愿意公开您可能想要了解的有关该应用程序的所有其他信息。

更新1我编译了针对.NET 3.5的应用程序,但未发生错误。不幸的是,我必须停用Task中依赖的所有内容。

更新2我记录了有关此问题的bug at Microsoft Connect。我想这个问题已经回答了。

最佳答案

这是.NET Framework 4.0的错误。我对此进行了记录。

这是微软的答案:


这看起来像是导致的已知问题
通过紧密关闭/打开中的计时问题
ServiceHost的顺序。服务主机
维护一些性能指标
可能不会收集垃圾
导致这种异常。我假设
您正在使用.Net Framework 4.0?
请尝试通过
打开第二个之前的强制GC
ServiceHost:


GC.Collect()
GC.WaitForPendingFinalizers()


尽他们所能,解决了这个问题。我希望它在以后的版本中得到修复。

关于.net - 重新打开ServiceHost时,WCF“实例已存在于CounterSet中”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2977630/

10-12 05:55