我在WCF中使用DiscoveryEndpoints但是我注意到当发现服务并且联系DiscoveryEndpoint时,它实际上会导致创建服务的实例。我不想要这个。
这几乎肯定与我使用自定义实例提供程序(支持StructureMap)有关 - 它将自定义InstanceProvider应用于每个EndpointDispatcher。
似乎我只想将自定义InstanceProvider应用于其合同实际与服务实现相匹配的端点。
有什么想法吗?
答案 0 :(得分:1)
我想我已经解决了......我只是忽略了任何有IsSystemEndpoint设置的东西:
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers)
{
ChannelDispatcher cd = cdb as ChannelDispatcher;
if (cd != null)
{
foreach (EndpointDispatcher ed in cd.Endpoints)
{
if (!ed.IsSystemEndpoint) // Ignore MEX etc
ed.DispatchRuntime.InstanceProvider =
new StructureMapInstanceProvider(serviceDescription.ServiceType);
}
}
}
}