public string DoImport(ImportDatabaseEventSource log, string blobUri, bool whatIf, int databaseSizeInGB = 5)
        {
            string requestGuid = null;

            //Setup Web Request for Import Operation
            WebRequest webRequest = WebRequest.Create(this.EndPointUri + @"/Import");
            webRequest.Method = WebRequestMethods.Http.Post;
            webRequest.ContentType = @"application/xml";

            //Create Web Request Inputs - Database Size & Edition, Blob Store Credentials and Server Connection Info
            ImportInput importInputs = new ImportInput
            {
                AzureEdition = "Web",
                DatabaseSizeInGB = databaseSizeInGB,
                BlobCredentials = new BlobStorageAccessKeyCredentials
                {
                    StorageAccessKey = this.StorageKey,
                    Uri = String.Format(blobUri, this.DatabaseName, DateTime.UtcNow.Ticks.ToString())
                },
                ConnectionInfo = new ConnectionInfo
                {
                    ServerName = this.ServerName,
                    DatabaseName = this.DatabaseName,
                    UserName = this.UserName,
                    Password = this.Password
                }
            };

            //Perform Web Request
            Stream webRequestStream = webRequest.GetRequestStream();
            DataContractSerializer dataContractSerializer = new DataContractSerializer(importInputs.GetType());

            if (whatIf)
            {
                using (var strm = new MemoryStream())
                {
                    dataContractSerializer.WriteObject(strm, importInputs);
                    strm.Flush();
                    strm.Seek(0, SeekOrigin.Begin);
                    using (var reader = new StreamReader(strm))
                    {
                        log.WouldHaveSent(reader.ReadToEnd());
                    }
                }
                return null;
            }
            else
            {
                using (var strm = new MemoryStream())
                {
                    dataContractSerializer.WriteObject(strm, importInputs);
                    strm.Flush();
                    strm.Seek(0, SeekOrigin.Begin);
                    using (var reader = new StreamReader(strm))
                    {
                        log.SendingRequest(reader.ReadToEnd());
                    }
                }

                dataContractSerializer.WriteObject(webRequestStream, importInputs);
                webRequestStream.Close();

                //Get Response and Extract Request Identifier
                WebResponse webResponse = null;
                XmlReader xmlStreamReader = null;

                try
                {
                    //Initialize the WebResponse to the response from the WebRequest
                    webResponse = webRequest.GetResponse();

                    xmlStreamReader = XmlReader.Create(webResponse.GetResponseStream());
                    xmlStreamReader.ReadToFollowing("guid");
                    requestGuid = xmlStreamReader.ReadElementContentAsString();
                    return requestGuid;
                }
                catch (WebException responseException)
                {
                    log.RequestFailed(responseException.Message);
                    {
                        log.ErrorStatusCode((int)(((HttpWebResponse)responseException.Response).StatusCode));
                        log.ErrorStatusDescription(((HttpWebResponse)responseException.Response).StatusDescription);
                    }

                    return null;
                }
            }
        }
        public bool DoImport(string blobUri)
        {
            logger.Info(String.Format("Starting Import Operation - {0}\n\r", DateTime.Now));
            string requestGuid    = null;
            bool   importComplete = false;

            //Setup Web Request for Import Operation
            WebRequest webRequest = WebRequest.Create(this.EndPointUri + @"/Import");

            webRequest.Method      = WebRequestMethods.Http.Post;
            webRequest.ContentType = @"application/xml";

            //Create Web Request Inputs - Database Size & Edition, Blob Store Credentials and Server Connection Info
            ImportInput importInputs = new ImportInput
            {
                AzureEdition     = "Web",
                DatabaseSizeInGB = 1,
                BlobCredentials  = new BlobStorageAccessKeyCredentials
                {
                    StorageAccessKey = this.StorageKey,
                    Uri = String.Format(blobUri, this.DatabaseName, DateTime.UtcNow.Ticks.ToString())
                },
                ConnectionInfo = new ConnectionInfo
                {
                    ServerName   = this.ServerName,
                    DatabaseName = this.DatabaseName,
                    UserName     = this.UserName,
                    Password     = this.Password
                }
            };

            //Perform Web Request
            logger.Info("Making Web Request for Import Operation...");
            Stream webRequestStream = webRequest.GetRequestStream();
            DataContractSerializer dataContractSerializer = new DataContractSerializer(importInputs.GetType());

            dataContractSerializer.WriteObject(webRequestStream, importInputs);
            webRequestStream.Close();

            //Get Response and Extract Request Identifier
            logger.Info("Serializing response and extracting guid...");
            WebResponse webResponse     = null;
            XmlReader   xmlStreamReader = null;

            try
            {
                //Initialize the WebResponse to the response from the WebRequest
                webResponse = webRequest.GetResponse();

                xmlStreamReader = XmlReader.Create(webResponse.GetResponseStream());
                xmlStreamReader.ReadToFollowing("guid");
                requestGuid = xmlStreamReader.ReadElementContentAsString();
                logger.Info(String.Format("Request Guid: {0}", requestGuid));

                //Get Status of Import Operation
                while (!importComplete)
                {
                    logger.Info("Checking status of Import...");
                    List <StatusInfo> statusInfoList = CheckRequestStatus(requestGuid);
                    StatusInfo        statusInfo     = statusInfoList.FirstOrDefault();
                    logger.Info(statusInfo.Status);

                    if (statusInfo.Status == "Failed")
                    {
                        logger.Info(String.Format("Database import failed: {0}", statusInfo.ErrorMessage));
                        importComplete = true;
                    }

                    if (statusInfo.Status == "Completed")
                    {
                        logger.Info(String.Format("Import Complete - Database imported to: {0}\n\r", statusInfo.DatabaseName));
                        importComplete = true;
                    }
                }

                return(importComplete);
            }
            catch (WebException responseException)
            {
                logger.ErrorFormat("Request Falied: {0}", responseException, responseException.Message);
                {
                    logger.ErrorFormat("Status Code: {0}", ((HttpWebResponse)responseException.Response).StatusCode);
                    logger.ErrorFormat("Status Description: {0}\n\r", ((HttpWebResponse)responseException.Response).StatusDescription);
                }

                return(importComplete);
            }
        }
        public bool DoImport(string blobUri)
        {
            logger.Info(String.Format("Starting Import Operation - {0}\n\r", DateTime.Now));
            string requestGuid = null;
            bool importComplete = false;

            //Setup Web Request for Import Operation
            WebRequest webRequest = WebRequest.Create(this.EndPointUri + @"/Import");
            webRequest.Method = WebRequestMethods.Http.Post;
            webRequest.ContentType = @"application/xml";

            //Create Web Request Inputs - Database Size & Edition, Blob Store Credentials and Server Connection Info
            ImportInput importInputs = new ImportInput
            {
                AzureEdition = "Web",
                DatabaseSizeInGB = 1,
                BlobCredentials = new BlobStorageAccessKeyCredentials
                {
                    StorageAccessKey = this.StorageKey,
                    Uri = String.Format(blobUri, this.DatabaseName, DateTime.UtcNow.Ticks.ToString())
                },
                ConnectionInfo = new ConnectionInfo
                {
                    ServerName = this.ServerName,
                    DatabaseName = this.DatabaseName,
                    UserName = this.UserName,
                    Password = this.Password
                }
            };

            //Perform Web Request
            logger.Info("Making Web Request for Import Operation...");
            Stream webRequestStream = webRequest.GetRequestStream();
            DataContractSerializer dataContractSerializer = new DataContractSerializer(importInputs.GetType());
            dataContractSerializer.WriteObject(webRequestStream, importInputs);
            webRequestStream.Close();

            //Get Response and Extract Request Identifier
            logger.Info("Serializing response and extracting guid...");
            WebResponse webResponse = null;
            XmlReader xmlStreamReader = null;

            try
            {
                //Initialize the WebResponse to the response from the WebRequest
                webResponse = webRequest.GetResponse();

                xmlStreamReader = XmlReader.Create(webResponse.GetResponseStream());
                xmlStreamReader.ReadToFollowing("guid");
                requestGuid = xmlStreamReader.ReadElementContentAsString();
                logger.Info(String.Format("Request Guid: {0}", requestGuid));

                //Get Status of Import Operation
                while (!importComplete)
                {
                    logger.Info("Checking status of Import...");
                    List<StatusInfo> statusInfoList = CheckRequestStatus(requestGuid);
                    StatusInfo statusInfo = statusInfoList.FirstOrDefault();
                    logger.Info(statusInfo.Status);

                    if (statusInfo.Status == "Failed")
                    {
                        logger.Info(String.Format("Database import failed: {0}", statusInfo.ErrorMessage));
                        importComplete = true;
                    }

                    if (statusInfo.Status == "Completed")
                    {
                        logger.Info(String.Format("Import Complete - Database imported to: {0}\n\r", statusInfo.DatabaseName));
                        importComplete = true;
                    }
                }

                return importComplete;
            }
            catch (WebException responseException)
            {
                logger.ErrorFormat("Request Falied: {0}",responseException, responseException.Message);
                {
                    logger.ErrorFormat("Status Code: {0}", ((HttpWebResponse)responseException.Response).StatusCode);
                    logger.ErrorFormat("Status Description: {0}\n\r", ((HttpWebResponse)responseException.Response).StatusDescription);
                }

                return importComplete;
            }
        }
        public string DoImport(ImportDatabaseEventSource log, string blobUri, bool whatIf, int databaseSizeInGB = 5)
        {
            string requestGuid = null;

            //Setup Web Request for Import Operation
            WebRequest webRequest = WebRequest.Create(this.EndPointUri + @"/Import");

            webRequest.Method      = WebRequestMethods.Http.Post;
            webRequest.ContentType = @"application/xml";

            //Create Web Request Inputs - Database Size & Edition, Blob Store Credentials and Server Connection Info
            ImportInput importInputs = new ImportInput
            {
                AzureEdition     = "Web",
                DatabaseSizeInGB = databaseSizeInGB,
                BlobCredentials  = new BlobStorageAccessKeyCredentials
                {
                    StorageAccessKey = this.StorageKey,
                    Uri = String.Format(blobUri, this.DatabaseName, DateTime.UtcNow.Ticks.ToString())
                },
                ConnectionInfo = new ConnectionInfo
                {
                    ServerName   = this.ServerName,
                    DatabaseName = this.DatabaseName,
                    UserName     = this.UserName,
                    Password     = this.Password
                }
            };

            //Perform Web Request
            Stream webRequestStream = webRequest.GetRequestStream();
            DataContractSerializer dataContractSerializer = new DataContractSerializer(importInputs.GetType());

            if (whatIf)
            {
                using (var strm = new MemoryStream())
                {
                    dataContractSerializer.WriteObject(strm, importInputs);
                    strm.Flush();
                    strm.Seek(0, SeekOrigin.Begin);
                    using (var reader = new StreamReader(strm))
                    {
                        log.WouldHaveSent(reader.ReadToEnd());
                    }
                }
                return(null);
            }
            else
            {
                using (var strm = new MemoryStream())
                {
                    dataContractSerializer.WriteObject(strm, importInputs);
                    strm.Flush();
                    strm.Seek(0, SeekOrigin.Begin);
                    using (var reader = new StreamReader(strm))
                    {
                        log.SendingRequest(reader.ReadToEnd());
                    }
                }

                dataContractSerializer.WriteObject(webRequestStream, importInputs);
                webRequestStream.Close();

                //Get Response and Extract Request Identifier
                WebResponse webResponse     = null;
                XmlReader   xmlStreamReader = null;

                try
                {
                    //Initialize the WebResponse to the response from the WebRequest
                    webResponse = webRequest.GetResponse();

                    xmlStreamReader = XmlReader.Create(webResponse.GetResponseStream());
                    xmlStreamReader.ReadToFollowing("guid");
                    requestGuid = xmlStreamReader.ReadElementContentAsString();
                    return(requestGuid);
                }
                catch (WebException responseException)
                {
                    log.RequestFailed(responseException.Message);
                    {
                        log.ErrorStatusCode((int)(((HttpWebResponse)responseException.Response).StatusCode));
                        log.ErrorStatusDescription(((HttpWebResponse)responseException.Response).StatusDescription);
                    }

                    return(null);
                }
            }
        }