【发布时间】:2012-11-06 11:12:15
【问题描述】:
我们有一个项目,它有一个 Web 角色(WCF 服务)和一个工作者角色。辅助角色平均使用 0.34% 的资源。我们希望在具有单个实例的单个云服务中同时托管 WCF 和辅助角色。如何才能做到这一点?目前,辅助角色和 WCF 服务各使用一个实例。
【问题讨论】:
标签: azure cloud cloud-hosting
我们有一个项目,它有一个 Web 角色(WCF 服务)和一个工作者角色。辅助角色平均使用 0.34% 的资源。我们希望在具有单个实例的单个云服务中同时托管 WCF 和辅助角色。如何才能做到这一点?目前,辅助角色和 WCF 服务各使用一个实例。
【问题讨论】:
标签: azure cloud cloud-hosting
Sandrino 的回答没有错,但从问题来看,似乎不需要任何线程。我的答案是将所有内容从工作角色的WorkerRole.cs 转移到网络角色的WebRole.cs。
【讨论】:
Run() 被调用一次,并且通常只是休眠、注入监控/日志记录等。一旦退出此方法,实例就会开始其关闭序列。有关角色实例生命周期的更多信息,请参阅 Cory Fowler 的 this article。
您可以为此使用ThreadedRoleEntryPoint:
public class WebRole : ThreadedRoleEntryPoint
{
...
public override void Run()
{
List<WorkerEntryPoint> workers = new List<WorkerEntryPoint>();
workers.Add(new MyWorkerRole());
base.Run(workers.ToArray());
}
}
您可以使用ThreadedRoleEntryPoint,而不是从默认的RoleEntryPoint 继承,它允许您传递应该作为后台线程启动的工作人员列表。这样,您可以通过将一个或多个 WorkerRoles 作为线程托管在 WebRole 中来节省资源。
【讨论】: