我在 WCF 中使用 DiscoveryEndpoints,但我注意到当发现服务并联系 DiscoveryEndpoint 时,它实际上会导致创建服务实例。我不想要这个。
这几乎肯定与我使用自定义实例提供程序(以支持 StructureMap)这一事实有关——它将自定义 InstanceProvider 应用于每个 EndpointDispatcher。
似乎我只想将自定义 InstanceProvider 应用于其合同实际上与服务实现匹配的端点。
有任何想法吗?
我在 WCF 中使用 DiscoveryEndpoints,但我注意到当发现服务并联系 DiscoveryEndpoint 时,它实际上会导致创建服务实例。我不想要这个。
这几乎肯定与我使用自定义实例提供程序(以支持 StructureMap)这一事实有关——它将自定义 InstanceProvider 应用于每个 EndpointDispatcher。
似乎我只想将自定义 InstanceProvider 应用于其合同实际上与服务实现匹配的端点。
有任何想法吗?
我想我解决了......我只是忽略了任何设置 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);
}
}
}
}