WCF и Azure: заставьте рабочую роль ждать, пока она не получит данные от другой рабочей роли - PullRequest
0 голосов
/ 19 октября 2011

Я новичок в 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.

Может кто-нибудь сказать мне, как это сделать.

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

Я думаю, я бы разработал это немного по-другому.

Вместо того, чтобы рабочие роли выставляли конечные точки WCF и отправляли сообщения между ними, может быть лучше использовать очереди.

Сообщения могут быть отправлены в очереди, а также забраны и обработаны другими рабочими ролями. Это обеспечивает определенный срок службы, поскольку если рабочая роль, которая должна получить сообщение, по какой-либо причине не работает, она может продолжить обработку этих сообщений в своей очереди при возврате. Также любые необработанные исключения, возникающие во время обработки сообщения, будут означать, что сообщение вновь появится в очереди по истечении определенного периода времени ожидания. Если ваше приложение / сайт действительно работает, вы можете добавить дополнительные экземпляры этих рабочих ролей для более быстрой обработки сообщений в очередях.

Поэтому, используя очереди, вы получаете определенную дополнительную прочность, и ее легче масштабировать позже.

Хорошее введение в использование очередей на сайте разработчика fusion

0 голосов
/ 19 октября 2011

Для этого см. http://blog.structuretoobig.com/post/2010/02/03/Windows-Azure-Role-Communication.aspx, с использованием служебной шины Azure, см. 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 (http://msdn.microsoft.com/en-us/library/windowsazure/gg278356.aspx)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...