// Skip to download again only when the cloud blob has no changes
        public async Task <string> ExportToTempFileAsync(string serviceName, Version serviceVersion)
        {
            var blob     = this.GetServiceRegistrationBlockBlobReference(serviceName, serviceVersion);
            var filePath = SoaRegistrationAuxModule.GetServiceRegistrationTempFilePath(Path.GetFileNameWithoutExtension(blob.Uri.ToString()));

            Trace.TraceInformation($"Will write Service Registration file to {filePath}");

            // check if the exsiting file's md5 and cloud blob's md5 have the same value
            if (File.Exists(filePath))
            {
                string fileMd5 = await GetMd5AuxAsync(blob);

                string existingFileMd5 = CalculateMd5Hash(File.ReadAllBytes(filePath));
                if (string.Equals(fileMd5, existingFileMd5))
                {
                    return(filePath);
                }
            }

            if (await blob.ExistsAsync())
            {
                await blob.DownloadToFileAsync(filePath, FileMode.Create);

                return(filePath);
            }

            return(string.Empty);
        }
        private CloudBlockBlob GetServiceRegistrationBlockBlobReference(string serviceName, Version serviceVersion)
        {
            var fileName = SoaRegistrationAuxModule.GetRegistrationFileName(serviceName, serviceVersion);

            Trace.TraceInformation($"Getting block blob reference for {fileName}.");
            return(this.blobContainer.GetBlockBlobReference(fileName));
        }
        private async Task <ServiceRegistrationInfo> GetServiceRegistrationInfo(string serviceName, Version serviceVersion)
        {
            var key = SoaRegistrationAuxModule.GetRegistrationName(serviceName, serviceVersion);
            var res = CacheInstance.Get(key);

            if (res == null)
            {
                var svrReg = await this.GetCoreAsync(serviceName, serviceVersion).ConfigureAwait(false);

                if (string.IsNullOrEmpty(svrReg))
                {
                    return(ServiceRegistrationInfo.Empty);
                }

                var svcRegInfo = new ServiceRegistrationInfo(svrReg);
                var newVal     = CacheInstance.AddOrGetExisting(key, svcRegInfo, ExpireIn5Secs) as ServiceRegistrationInfo;
                return(newVal ?? svcRegInfo);
            }

            return((ServiceRegistrationInfo)res);
        }
        public async Task ImportFromFileAsync(string filePath, string serviceName)
        {
            Debug.Assert(filePath != null);
            if (!File.Exists(filePath))
            {
                throw new InvalidOperationException($"File {filePath} for uploading does not exist.");
            }

            string svcName;

            if (string.IsNullOrEmpty(serviceName))
            {
                svcName = Path.GetFileNameWithoutExtension(filePath).ToLowerInvariant();
            }
            else
            {
                svcName = SoaRegistrationAuxModule.GetRegistrationFileName(serviceName, null);
            }

            var blob = this.GetServiceRegistrationBlockBlobReference(svcName, null);
            await blob.UploadFromFileAsync(filePath);
        }
 public string CalculateMd5Hash(byte[] blobData)
 {
     return(SoaRegistrationAuxModule.CalculateMd5Hash(System.Text.Encoding.UTF8.GetString(blobData, 0, blobData.Length)));
 }
 /// <inheritdoc />
 public async Task ImportFromFileAsync(string filePath, string serviceName)
 {
     await SoaRegistrationAuxModule.ImportServiceRegistrationFromFileAuxAsync(this.SetAsync, filePath, serviceName).ConfigureAwait(false);
 }
 public async Task <string> ExportToTempFileAsync(string serviceName, Version serviceVersion)
 {
     return(await SoaRegistrationAuxModule.ExportServiceRegistrationToTempFileAuxAsync(this.GetAsync, serviceName, serviceVersion).ConfigureAwait(false));
 }