|
Сайт 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;
}
}
}
