in toolkit/Toolkit/SqlManagedInstanceToolkit.cs [182:262]
public static void CheckStorageAccountAccessibility(SqlString storageAccount, SqlString sasToken, SqlBoolean executeWriteOperation)
{
List<string> result = new List<string>();
Uri uri = null;
try
{
uri = new Uri(storageAccount.Value);
}
catch (UriFormatException)
{
result.Add("URI is in the wrong format");
}
if (uri != null && uri.Port != 443)
{
result.Add("Only https is allowed");
}
if (uri != null)
{
string hostname = uri.Host;
string ipAddress;
result.AddRange(CheckFqdn(hostname, out ipAddress));
result.AddRange(CheckIp(ipAddress, 443));
if (executeWriteOperation.Value)
{
// Try writing to the file
//
string requestUri = string.Format("{0}/checktestblob_{1}_{2}?{3}", storageAccount.Value, DateTime.UtcNow.ToString("yyyyMMd_HHmmss"), Guid.NewGuid().ToString("N"), sasToken);
HttpWebRequest request = HttpWebRequest.CreateHttp(requestUri);
request.Method = "PUT";
request.ContentType = "text/plain; charset=UTF-8";
request.ContentLength = 0;
request.Headers["x-ms-blob-type"] = "BlockBlob";
request.Headers["x-ms-version"] = "2020-04-08";
request.Headers["x-ms-date"] = DateTime.UtcNow.ToString();
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
var encoding = string.IsNullOrEmpty(response.CharacterSet) ? Encoding.ASCII : Encoding.GetEncoding(response.CharacterSet);
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
string responseBody = reader != null ? reader.ReadToEnd() : null;
result.Add(string.Format("Put request to account {0} returned {1}. Description: {2}; Response: {3};", storageAccount.Value, response.StatusCode, response.StatusDescription, responseBody));
}
}
}
catch (WebException wex)
{
string returnedResponse = string.Empty;
HttpWebResponse response = (HttpWebResponse)wex.Response;
if (response != null)
{
var encoding = string.IsNullOrEmpty(response.CharacterSet) ? Encoding.ASCII : Encoding.GetEncoding(response.CharacterSet);
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
returnedResponse = reader != null ? reader.ReadToEnd() : string.Empty;
}
response.Dispose();
}
result.Add(string.Format("Put request to account {0} throw an exception {1}. Http response: {2}.", storageAccount.Value, wex.Message, returnedResponse));
}
}
}
// Expose results.
//
foreach (var row in result)
{
SqlContext.Pipe.Send(row);
}
}