public override bool OnStart()

in SmvCloudWorker/WorkerRole.cs [293:388]


        public override bool OnStart()
        {
            try
            {
                // Set the maximum number of concurrent connections .
                System.Net.ServicePointManager.DefaultConnectionLimit = 12;

                // Set options for blob storage.
                options = new BlobRequestOptions();
                options.ServerTimeout = TimeSpan.FromMinutes(10);
                options.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval), CloudConstants.MaxRetries);

                // Get the connection strings.
                string assemblyDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                string cloudConfigPath = Path.Combine(assemblyDir, CloudConstants.CloudConfigXmlFileName);
                string cloudConfigContents = Utility.ReadFile(cloudConfigPath);
                string schemaPath = Path.Combine(assemblyDir, CloudConstants.CloudConfigXsdFileName);
                using (var c = new StringReader(cloudConfigContents))
                {
                    if (!Utility.ValidateXmlFile(schemaPath, c))
                    {
                        Trace.TraceError("Could not load cloud config from file: " + cloudConfigPath);
                        return false;
                    }
                }
                var serializer = new XmlSerializer(typeof(SMVCloudConfig));
                using (var reader = new StringReader(cloudConfigContents))
                {
                    cloudConfig = (SMVCloudConfig)serializer.Deserialize(reader);
                }

                bool done = false;
                while (!done)
                {
                    try
                    {
                        var storageAccount = CloudStorageAccount.Parse(cloudConfig.StorageConnectionString.value);

                        // Setup queue storage.
                        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
                        queueClient.DefaultRequestOptions = new QueueRequestOptions();
                        queueClient.DefaultRequestOptions.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval),
                            CloudConstants.MaxRetries);
                        inputQueue = queueClient.GetQueueReference(CloudConstants.InputQueueName);

                        // Setup blob storage.
                        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
                        blobClient.DefaultRequestOptions = new BlobRequestOptions();
                        blobClient.DefaultRequestOptions.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval),
                            CloudConstants.MaxRetries);
                        jobsContainer = blobClient.GetContainerReference(CloudConstants.InputBlobContainerName);
                        resultsContainer = blobClient.GetContainerReference(CloudConstants.OutputBlobContainerName);
                        versionsContainer = blobClient.GetContainerReference(CloudConstants.VersionsContainerName);

                        // Setup table storage.
                        var tableStorage = storageAccount.CreateCloudTableClient();
                        tableStorage.DefaultRequestOptions = new TableRequestOptions();
                        tableStorage.DefaultRequestOptions.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval), CloudConstants.MaxRetries);
                        CloudTable table = tableStorage.GetTableReference(CloudConstants.TableName);
                        tableDataSource = new ActionsTableDataSource(table);

                        // Setup the service bus topic.
                        var namespaceManager = NamespaceManager.CreateFromConnectionString(cloudConfig.ServiceBusConnectionString.value);
                        if (!namespaceManager.TopicExists(CloudConstants.ResultsTopicName))
                        {
                            namespaceManager.CreateTopic(CloudConstants.ResultsTopicName);
                        }

                        done = true;
                    }
                    catch (Exception e)
                    {
                        Trace.TraceError("Failure trying to connect to Azure storage: " + e.ToString());
                    }
                }

                // Get paths to important directories in the file system. Remove the trailing slash from the paths.
                LocalResource localResource = RoleEnvironment.GetLocalResource(CloudConstants.SmvWorkingDirectoryResourceName);
                workingDirectory = localResource.RootPath.Remove(localResource.RootPath.Length - 1);

                localResource = RoleEnvironment.GetLocalResource(CloudConstants.SmvResultsDirectoryResourceName);
                resultsDirectory = localResource.RootPath.Remove(localResource.RootPath.Length - 1);

                localResource = RoleEnvironment.GetLocalResource(CloudConstants.SmvDirectoryResourceName);
                smvVersionsDirectory = localResource.RootPath.Remove(localResource.RootPath.Length - 1);
            }
            catch (Exception e)
            {
                Trace.TraceError("Exception while running OnStart(): " + e.ToString());
                return false;
            }

            Utility.result = null;

            return base.OnStart();
        }