我对WCF很新。我遵循了关于如何使用内部端点(WCF)来创建角色到角色通信的教程。 Link for the tutorial
他们实际上创建了一个工人角色的多个实例并互相戳。
代码是
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被戳入。
任何人都可以告诉我该怎么做。
答案 0 :(得分:0)
要执行此操作,请参阅http://blog.structuretoobig.com/post/2010/02/03/Windows-Azure-Role-Communication.aspx,使用Azure Service Bus查看http://blogs.msdn.com/b/appfabriccat/archive/2010/09/30/implementing-reliable-inter-role-communication-using-windows-azure-appfabric-service-bus-observer-pattern-amp-parallel-linq.aspx,或者您可以使用Azure队列在角色之间进行通信,或者您可以使用Azure缓存服务({{3 }})
答案 1 :(得分:0)
我想我会稍微改变一点。
不是让工作者角色公开WCF端点并在它们之间发送消息,而是使用队列可能更为简洁。
邮件可以发布到队列,并由其他工作人员角色选取和处理。这引入了一定程度的持久性,因为如果应该接收消息的工作者角色因任何原因而失效,它可以在重新启动时继续在其队列上处理这些消息。处理消息时发生的任何未处理的异常也意味着消息在某个超时时段后重新出现在队列中。如果您的应用程序/站点真正起飞,您可以添加这些辅助角色的其他实例,以便更快地处理队列中的消息。
因此,通过使用队列,您可以获得一定的额外耐久性,并且以后更容易扩展。
有一个很好的介绍