覆盖ServiceHost类

时间:2016-01-25 16:59:27

标签: c# wcf windows-services

我使用WCF服务库运行Windows服务,我需要覆盖OnOpening()来处理某些操作。

以下是我从ServiceHost继承的自定义类:

public class StratusServiceHost : ServiceHost
    {
        private Type type;

        public StratusServiceHost(Type t, Uri baseAddresses) :
            base(t, baseAddresses) { }

        protected override void OnOpening()
        {
            base.OnOpening();
        }
    }

这是我的Host类,用于实现我的Windows服务:

internal class StratusHost
    {
        static StratusServiceHost serviceHost = null;
        public StratusHost()
        {

        }

        internal static void Start()
        {
            if (serviceHost != null)
                serviceHost.Close();
//serviceHost = new ServiceHost(typeof(StratusApiService));
            serviceHost = new StratusServiceHost(typeof(StratusApiService));
            serviceHost.Open();
        }

        internal static void Stop()
        {
            if (serviceHost != null)
            {
                serviceHost.Close();
                serviceHost = null;
            }
        }
    }

我无法编译解决方案并收到以下错误:

  

StratusServiceHost.StratusServiceHost'不包含构造函数   这需要1个参数

但如果您使用ServiceHost的文档,则没有包含一个参数的构造函数,serviceHost = new ServiceHost(typeof(StratusApiService))仍然有效。

ServiceHost构造函数:

protected ServiceHost();
public ServiceHost(object singletonInstance, params Uri[] baseAddresses);
public ServiceHost(Type serviceType, params Uri[] baseAddresses);

1 个答案:

答案 0 :(得分:1)

您在构造函数的实现中缺少params关键字。尝试更改:

public StratusServiceHost(Type t, Uri baseAddresses) :
        base(t, baseAddresses) { }

要:

public StratusServiceHost(Type t, params Uri baseAddresses) :
        base(t, baseAddresses) { }

params关键字允许您发送可变数量的参数 - 如果没有提供,则将其视为长度为零的数组。这就是为什么这条线有效:

serviceHost = new ServiceHost(typeof(StratusApiService));

你并没有真正调用单参数构造函数,你调用一个带有2个参数的构造函数。在这种情况下,您不必为第二个参数提供任何内容。