Ответ 1
Во-первых, поймите, что в Windows Azure ваша рабочая роль просто выполняется внутри среды Windows 2008 Server (SP2 или R2). При развертывании приложения вы также развертываете исполняемый файл C (или захватываете его из хранилища blob, но немного более продвинутым). Чтобы узнать, где ваше приложение живет на диске, вызовите Environment.GetEnvironmentVariable("RoleRoot")
-, который возвращает путь. Обычно у вас есть приложение, находящееся в папке с именем AppRoot под корнем роли. Вы найдете там свой исполняемый файл C.
Затем вам нужно, чтобы ваше приложение записывало свои файлы в выходной каталог, указанный в командной строке. Вы можете настроить хранилище в своей локальной виртуальной машине с вашими свойствами роли. Перейдите на вкладку "Локальное хранилище" и настройте именованную область хранения:
Теперь вы можете получить путь к этой области хранения, в коде и передать ее в качестве аргумента командной строки:
var outputStorage = RoleEnvironment.GetLocalResource("MyLocalStorage");
var outputFile = Path.Combine(outputStorage.RootPath, "myoutput.txt");
var cmdline = String.Format("--output {0}", outputFile);
Вот пример запуска процесса myapp.exe с аргументами командной строки:
var appRoot = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot")
+ @"\", @"approot");
var myProcess = new Process()
{
StartInfo = new ProcessStartInfo(Path.Combine(appRoot, @"myapp.exe"), cmdline)
{
CreateNoWindow = false,
UseShellExecute = false,
WorkingDirectory = appRoot
}
};
myProcess.WaitForExit();
Обычно вы устанавливаете CreateNoWindow в true, но его легче отлаживать, если вы можете увидеть окно командной оболочки.
Последнее: после того, как ваше приложение будет создано для создания файла, вы также захотите:
- Обработайте его и удалите (он не в прочном месте, так что в конце концов он исчезнет)
- Измените хранилище, чтобы использовать Cloud Drive (долговечное хранилище)
- Скопируйте файл в blob (долговечное хранилище)
В процессе производства вы захотите добавить обработку исключений, и вы можете перенаправить stdout и stderr для захвата. Но этот примерный код должен быть достаточно, чтобы вы начали.
OOPS - еще одна вещь: "Добавляя" myapp.exe "в свой проект, будьте уверены, чтобы перейти к его свойствам и установить" Копировать в выходной каталог "на" Копировать всегда "- в противном случае ваш myapp.exe файл не окажется в Windows Azure, и вы будете удивляться, почему все не работает.
EDIT: нажатие результатов на blob - быстрый пример
Сначала настройте учетную запись хранилища и добавьте в свою настройку роли. Скажем, вы назвали его "AzureStorage" - теперь настройте его в коде, получите ссылку на контейнер blob, получите ссылку на blob внутри этого контейнера, а затем выполните загрузку файла в blob:
CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("AzureStorage");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer outputfiles = blobClient.GetContainerReference("outputfiles");
outputfiles.CreateIfNotExist();
var blobname = "myoutput.txt";
var blob = outputfiles.GetBlobReference(blobname);
blob.UploadFile(outputFile);