我有一个具有单个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/