Опубликован: 28.01.2014 | Доступ: свободный | Студентов: 2262 / 262 | Длительность: 14:33:00
Самостоятельная работа 4:

Миграция Web-сайта в Cloud Services

< Лекция 8 || Самостоятельная работа 4: 1234 || Лекция 9 >

Нажмите правой кнопкой мыши на директории References. Выберите Add Reference. В открывшемся диалоговом окне выберите следующие сборки:

Microsoft.WindowsAzure.StorageClient 1.7.0.0
Microsoft.WindowsAzure.Configuration 1.7.0.0
Microsoft.WindowsAzure.ServiceRuntime 1.7.0.0
Microsoft.ServiceBus 1.7.0.0
System.Runtime.Serialization 4.0.0.0

Откройте файл Global.asax и добавьте в метод Application_Start() код, приведённый ниже.

CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSettingPublisher) =>
            {
                var connectionString = RoleEnvironment.GetConfigurationSettingValue(configName);
                configSettingPublisher(connectionString);
            }
  );

Щелкните правой кнопкой мыши на проекте. Выберите Add Windows Azure Cloud Service Project.

Нажмите правой кнопкой мыши на Roles в созданном проекте MVC4Gallery.Azure. Выберите Add. Нажмите New Worker Role Project.

В Windows Azure Tools 1.7 был добавлен новый шаблон Worker-роли, уже сконфигурированный для использования Service Bus. В окне Add New Role Project выберите Worker Role with Service Bus Queue и нажмите Add.

Откройте файл WorkerRole.cs и замените его содержимое на код, приведённый ниже.

using System;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Net;
using System.Threading;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Messaging;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;

namespace WorkerRoleWithSBQueue1
{
    public class WorkerRole : RoleEntryPoint
    {
        // The name of your queue
        const string QueueName = "servicebustest";

        // QueueClient is thread-safe. Recommended that you cache 
        // rather than recreating it on every request
        QueueClient Client;
        bool IsStopped;

        public override void Run()
        {

            while (!IsStopped)
            {
                try
                {
                    // Получение сообщения
                    BrokeredMessage receivedMessage = null;
                    receivedMessage = Client.Receive();

                    if (receivedMessage != null)
                    {
                        // Обработка сообщения. В данном случае изображение 
получается из блоба, затем возвращается в том же виде, 
но с другим именем файла.

                        GetBlobFromStorage("ourgallery", receivedMessage.GetBody<string>());
                        receivedMessage.Complete();


                    }
                }
                catch (MessagingException e)
                {
                    if (!e.IsTransient)
                    {
                        Trace.WriteLine(e.Message);
                        throw;
                    }

                    Thread.Sleep(10000);
                }
                catch (OperationCanceledException e)
                {
                    if (!IsStopped)
                    {
                        Trace.WriteLine(e.Message);
                        throw;
                    }
                }
            }
        }

        public override bool OnStart()
        {
            CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSettingPublisher) =>
            {
                var connectionString = RoleEnvironment.GetConfigurationSettingValue(configName);
                configSettingPublisher(connectionString);
            }
);
            // Определение максимального количества одновременных подключений 
            ServicePointManager.DefaultConnectionLimit = 12;

            // Создание очереди в том случае, если ее еще не существует 
            string sbconnectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
            var namespaceManager = NamespaceManager.CreateFromConnectionString(sbconnectionString);
            if (!namespaceManager.QueueExists(QueueName))
            {
                namespaceManager.CreateQueue(QueueName);
            }

            // Инициализация подключения к очереди Service Bus 
            Client = QueueClient.CreateFromConnectionString(sbconnectionString, QueueName);
            IsStopped = false;
            return base.OnStart();
        }

        public override void OnStop()
        {
            // Закрытие подключения к очереди Service Bus 
            IsStopped = true;
            Client.Close();
            base.OnStop();
        }

        public void GetBlobFromStorage(string author, string title)
        {
            try
            {
                CloudBlob sourceBlob = getBlobContainer("ourgallery").GetBlobReference(title);
                CloudBlob newBlob = getBlobContainer("ourgallery").GetBlobReference(title + "small_copy");
                newBlob.CopyFromBlob(sourceBlob);
                NameValueCollection metadata = new NameValueCollection();
                metadata["title"] = title + "small_copy";

            }
            catch (StorageClientException e)
            {
                Console.WriteLine("Возникла ошибка: " + e.Message); System.Environment.Exit(1);
            }
        }

        public static CloudBlobContainer getBlobContainer(string userId)
        {
            var account = CloudStorageAccount.FromConfigurationSetting("storageaccount");
            CloudBlobContainer container = account.CreateCloudBlobClient().GetContainerReference(userId);
            container.CreateIfNotExist();
            return container;
        }

    }
}
< Лекция 8 || Самостоятельная работа 4: 1234 || Лекция 9 >
Руслан Муравьев
Руслан Муравьев

Сайт dreamspark пишет что код истек :(

Andriy Zymenko
Andriy Zymenko

Этот курс требует оновления https://portal.azure.com/#create/hub здесь нет пункта Web Site в разделе Compute. К тому же для создание трубуется подписка