Anu*_*uya 6 c# wcf windows-services sqldependency
我创建了一个通知服务,SqlDependency用于通知其他服务有关特定表中的更改.这是在Visual Studio的Windows服务模板中完成的.因此,在该OnStart事件中,SqlDependency创建订阅,并且在OnStop事件期间,完成取消订阅.
上述解决方案工作得很好.
现在,由于某些原因,我必须将其作为WCF类库项目并将其作为Windows服务托管.我无法想到SqlDependency在这种情况下可以进行订阅和取消订阅的地方.
启动Windows服务时,必须自动完成订阅.
注意:我有一个通用的Windows服务主机,它将托管我所有的WCF类库项目,并且在那里做不了多少.
这有什么解决方案或解决方法吗?
小智 0
我希望我能解决你的问题。您拥有 WCF 库内部的所有逻辑,但不知道如何在将托管 WCF 服务的 Windows 服务启动时同步订阅和取消订阅 SqlDependancy 事件。
我的想法是使用 ServiceHostFactory 创建服务的实例,并挂钩服务的打开和关闭事件,从那里调用所有必要的构造函数和连接器。
我的大部分答案都来自这篇关于托管 WCF 服务的精彩而冗长的文章,其中的链接直接指向您案例中的主题。有关ServiceHost和ServiceHostFactory类的一些附加文档。
请记住,这不是您可以复制/粘贴的完整代码,而是用法演示。
以下是 Windows 服务的示例:
public partial class YourWindowsService : ServiceBase
{
// It's your choice where to create this instance, I used constructor injection here arbitrarily
private readonly YourWCFServiceFactory serviceFactory;
private ServiceHost host;
public YourWindowsService(YourWCFServiceFactory serviceFactory)
{
InitializeComponent();
this.serviceFactory = serviceFactory;
}
protected override void OnStart(string[] args)
{
Type serviceType = typeof(YourService);
host = serviceFactory.CreateServiceHost(serviceType, new string[] { "yourBaseUri" });
host.Open();
}
protected override void OnStop()
{
if(host != null)
host.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
以及你们工厂的一个例子:
public class YourWCFServiceFactory: ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
host.Opening += new EventHandler(host_Opening);
host.Closing += new EventHandler(host_Closing);
return host;
}
private void host_Opening(object sender, EventArgs e)
{
// Initialization here
}
private void host_Opening(object sender, EventArgs e)
{
// Cleanup here
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |