2011-10-19 71 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