如何回收利用自托管的WCF服务

3
我正在托管一个类似这个的WCF服务于Azure Worker角色中。 我希望能够按照一定的时间间隔“回收”WCF服务主机。 问题是,我假设服务正在运行自己的应用程序域,我无法轮询任何事件,也无法在Worker角色和WCF服务之间共享任何公共数据。 参考此处提供的最小代码来进行托管:
public override void Run()
{
    using(var host = new ServiceHost(typeof(MyService))
    {
        // Configure host here...

        host.Open

        while(true)
        {
            Sleep(1000);
        }
    }
}

我希望能够每24小时以某种方式“重新启动”主机,但我不确定如何或者应该钩入什么来完成它。

1
你不能只是在Windows虚拟机中托管它,让IIS应用程序池回收它吗? - VsMaX
该服务是队列驱动的,并在需要时动态启动。我们有其他托管在IIS上的服务,但这个不是其中之一。 - Didaxis
你找到解决方案了吗?我在考虑相同的事情,只是没有使用Azure。我想要能够回收自托管的WCF服务。 - Alon Catz
我们最终没有使用Azure,因为涉及到法律原因(我们存储的数据类型)。我们创建了自己的工作角色托管解决方案,可以随意启动/关闭应用程序域。我们实际上是通过Sql Server进行配置的。托管这些应用程序域的项目非常复杂。一个更简单的解决方案可能是随意启动控制台应用程序。 - Didaxis
1个回答

5

您的WCF服务是否在工作角色中以进程方式运行(即,所有内容都在WaWorkerHost.exe中运行)?如果是这样,您可以调用RoleEnvironment.RequestRecycle,或者让Run()方法退出。无论哪种方式,都会使WaWorkerHost.exe优雅地关闭,然后Azure客户代理将自动重新启动所有内容。


我认为是这样(我没有看到其他进程启动)。这听起来正是我所需要的。星期一回到办公室后会尝试一下。 - Didaxis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接