[英]WCF: Using my “custom” ServiceHost in my app.config/web.config for my wcf service?
我创建了一个简单的Custom ServiceHost,它继承自ServiceHost并覆盖了InitializeRuntime方法。
如何更改我的app.config / web.config以使用自定义服务主机,以便执行我的重写InitializeRunTime ..
我在配置文件中看到属性,比如behaviorConfiguration等,但是没有什么可以强迫它使用我的自定义ServiceHost
我的ServiceHost很简单: -
public class UnityServiceHost : ServiceHost
{
protected override void InitializeRuntime()
{
//DO MY UNITY INJECTION HERE
//Console.WriteLine("");
base.InitializeRuntime();
}
}
任何帮助真的很感激。
谢谢
Oran Dennison描述了如何使用Spring.NET执行此操作: http : //orand.blogspot.com/2006/10/wcf-service-dependency-injection.html
总之,您将使用WCF的“行为注入”来提供DI容器创建的服务实例。
1)使用GetInstance方法创建自定义IInstanceProvider实现,返回容器创建的服务对象:
public object GetInstance(InstanceContext instanceContext, Message message)
{
return _container.Resolve(_serviceType);
}
2)实现自定义IServiceBehaviour,将自定义IInstanceProvider添加到每个端点配置。
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)
{
ed.DispatchRuntime.InstanceProvider =
new YourCustomInstanceProvider(serviceDescription.ServiceType);
}
}
}
}
3)在自定义服务主机中,覆盖OnOpening并添加自定义服务行为
protected override void OnOpening()
{
this.Description.Behaviors.Add(new CustomServiceBehavior());
base.OnOpening();
}
请注意,您可能必须将UnityContainer实例传递给IInstanceProvider,以便它可以进行解析。
如果您自己托管服务(而不是使用IIS或WAS),则只需创建UnityServiceHost而不是常规ServiceHost。
如果您使用的是IIS或WAS,请编写ServiceHostFactory
您需要创建自定义ServiceHostFactory并使用它来创建UnityServiceHost。 您指定要在SVC文件中使用的ServiceHostFactory。 有关SVC语法,请参阅MSDN文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.