Сайт dreamspark пишет что код истек :( |
Опубликован: 28.01.2014 | Уровень: для всех | Доступ: свободно
Самостоятельная работа 4:
Миграция Web-сайта в Cloud Services
Нажмите правой кнопкой мыши на директории 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; } } }