Во-первых, поймите, что в 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, но это прощеотладка, если вы видите окно командной оболочки.
Последнее: когда ваше приложение завершит создание файла, вы можете либо:
- обработать его и удалить его (оно не в надежном месте, поэтому в конечном итоге оно исчезнет)
- Измените хранилище на использование облачного диска (долговременное хранилище)
- Скопируйте файл в большой двоичный объект (надежное хранилище)
В процессе работы вы захотите добавить обработку исключений и можете перенаправить stdout и stderr для захвата.Но этого примера кода должно быть достаточно, чтобы начать работу.
OOPS - еще одна «еще одна вещь»: при добавлении «myapp.exe» в ваш проект, ОБЯЗАТЕЛЬНО перейдите к его «Свойствам» и установите«Копировать в выходной каталог» в «Копировать всегда» - иначе ваш файл myapp.exe не окажется в Windows Azure, и вы удивитесь, почему что-то не работает.
РЕДАКТИРОВАТЬ: отправка результатов вblob - быстрый пример
Сначала настройте учетную запись хранения и добавьте в настройки своей роли.Допустим, вы назвали его «AzureStorage» - теперь установите его в коде, получите ссылку на контейнер больших двоичных объектов, получите ссылку на большой двоичный объект в этом контейнере, а затем выполните загрузку файла в большой двоичный объект:
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);