WCF&Azure:使工作角色等待,直到它从另一个工作角色接收数据

WCF&Azure:使工作角色等待,直到它从另一个工作角色接收数据,wcf,azure,Wcf,Azure,我是WCF的新手。我学习了一个关于如何使用内部端点WCF进行角色间通信的教程 它们实际上创建了一个工作者角色的多个实例,并相互戳戳 代码是 foreach (var ep in endPoints) { IService1 worker = WorkerRole.factory.CreateChannel(new EndpointAddress(string.Format("net.tcp://{0}/Service1", ep.I

我是WCF的新手。我学习了一个关于如何使用内部端点WCF进行角色间通信的教程

它们实际上创建了一个工作者角色的多个实例,并相互戳戳

代码是

            foreach (var ep in endPoints)
        {
            IService1 worker = WorkerRole.factory.CreateChannel(new EndpointAddress(string.Format("net.tcp://{0}/Service1", ep.IPEndpoint)));

            try
            {
                Trace.WriteLine(worker.SayHello(currentInstance.Id.ToString()), "Information");
                ((ICommunicationObject)worker).Close();
            }
            catch (Exception e)
            {
                Trace.TraceError("unable to poke worker role instance '{0}'. {1}", ep.RoleInstance.Id, e.Message);
                ((ICommunicationObject)worker).Abort();
            }
        }
但我想让一个工作者角色等到它被其他工作者角色刺穿。例如,有3个工作者角色。工作者角色2和工作者角色3应等待工作者角色1刺穿它


有人能告诉我怎么做吗。

要直接做到这一点,请参见,使用Azure服务总线,或者您可以使用Azure队列在角色之间进行通信,或者您可以使用Azure缓存服务,我想我的架构会略有不同

与其让工作者角色公开WCF端点并在它们之间发送消息,使用队列可能更整洁

消息可以发布到队列,并由其他工作人员角色拾取和处理。这引入了一定程度的持久性,因为如果本应接收消息的工作者角色由于任何原因而关闭,那么当它返回时,它可以在其队列上继续处理这些消息。此外,在处理消息时发生的任何未经处理的异常将意味着消息在特定超时时间后重新出现在队列上。如果你的应用程序/站点真的成功了,你可以添加这些工作者角色的其他实例,以更快地处理队列中的消息

因此,通过使用队列,您可以获得一定程度的额外耐久性,并且以后更容易扩展

关于使用队列有一个很好的介绍