我使用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);
答案 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个参数的构造函数。在这种情况下,您不必为第二个参数提供任何内容。