繁体   English   中英

WCF:在我的app.config / web.config中使用我的“自定义”ServiceHost来获取我的wcf服务?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM