2011-10-19 31 views
0

我对WCF很新颖。我按照教程介绍了如何使用内部端点(WCF)来实现角色到角色的通信。 Link for the tutorialWCF&Azure:使工作角色等待,直到它从另一个工作角色接收数据

它们实际上创建了一个辅助角色的多个实例并相互戳。

的代码是

  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

我想我会建筑师略有不同。

而不是让工作人员角色暴露WCF端点并在它们之间发送消息,它可能更适合使用队列。

消息可以发布到队列并由其他工作角色提取和处理。这引入了一定的持久性,因为如果由于某种原因应该接收消息的工作者角色停止工作,它可以在队列恢复时继续处理队列中的消息。处理消息时发生的任何未处理的异常也意味着消息在一定的超时时间后重新出现在队列中。如果您的应用程序/网站真正起飞,您可以添加这些辅助角色的其他实例以更快速地处理队列中的消息。

因此,通过使用队列,您具有一定的附加耐久性,并且稍后可以更容易地进行扩展。

有一个很好的介绍,使用队列on the developer fusion website