重写服务主机类

本文关键字:主机 服务 重写 | 更新日期: 2023-09-27 18:31:52

我使用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);

重写服务主机类

构造函数上的实现中缺少 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 个参数的构造函数。 在这种情况下,您不必为第二个参数提供任何内容。