重写服务主机类
本文关键字:主机 服务 重写 | 更新日期: 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 个参数的构造函数。 在这种情况下,您不必为第二个参数提供任何内容。