Создание базы данных в Azure с использованием Management SDK

У меня есть этот код для программного создания базы данных в Azure, отсюда:

public static string subscriptionId = "ec19938f-6348-4182-83cf-091370e65";
public static string base64EncodedCertificate = "???"; // what goes here?
static SubscriptionCloudCredentials getCredentials()
{
    return new CertificateCloudCredentials(subscriptionId, new X509Certificate2(Convert.FromBase64String(base64EncodedCertificate)));
}

static void Main(string[] args)
{
    SqlManagementClient client = new SqlManagementClient(getCredentials());
    client.Databases.Create("mysub1", new Microsoft.WindowsAzure.Management.Sql.Models.DatabaseCreateParameters()
    {
        Name = "newdbtest",
        MaximumDatabaseSizeInGB = 1,
        CollationName = "SQL_Latin1_General_CP1_CI_AS",
        Edition = "Web"
    });

    Console.ReadLine();
}

Я считаю, что следующий шаг - получить сертификат и загрузить его в Azure. По этой ссылке

$cert = New-SelfSignedCertificate -DnsName yourdomain.cloudapp.net -CertStoreLocation "cert:\LocalMachine\My"
$password = ConvertTo-SecureString -String "your-password" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath ".\my-cert-file.pfx" -Password $password

Теперь у меня есть сертификат, как мне получить значение для base64EncodedCertificate?

Вторая часть вопроса: что мне делать с файлом.cer? т.е. я предполагаю, что я загружаю это в Azure. Нужно ли создавать "облачный сервис"?

1 ответ

Решение

Pfx файл не правильный. Вам нужен файл с .publishsettings расширение. Вы можете получить этот файл из Azure PowerShell с помощью этой команды:

Get-AzurePublishSettingsFile

Подробнее об этом здесь

Это XML-файл в следующем формате:

<?xml version="1.0" encoding="utf-8"?>
<PublishData>
  <PublishProfile SchemaVersion="2.0" PublishMethod="AzureServiceManagementAPI">
    <Subscription
      ServiceManagementUrl="https://management.core.windows.net"
      Id="{GUID With subscription ID}"
      Name="{Subscription name}"
      ManagementCertificate="{Long Base64 encoded value}" />
  </PublishProfile>
</PublishData>

Значение, которое вы ищете ManagementCertificate,

Когда я сделал то же самое, что и вы, я включил файл.publishsettings в развертывание, а затем прочитал его в следующем коде:

using System;
using System.IO;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Xml.Linq;
using Microsoft.WindowsAzure;


public CertificateCloudCredentials GetCredentials()
{
    try
    {
        var certFileStream = this.GetCertificateString();
        var xDocument = XDocument.Load(certFileStream);

        var publishProfileElement = xDocument.Descendants("PublishProfile").Single();
        var subscriptionElement = publishProfileElement.Descendants("Subscription").Single();

        var certificateAttribute = publishProfileElement.Attribute("ManagementCertificate") ?? subscriptionElement.Attribute("ManagementCertificate");
        var subscriptionId = subscriptionElement.Attribute("Id").Value;

        var cert = new X509Certificate2(Convert.FromBase64String(certificateAttribute.Value));

        var cloudCredentials = new CertificateCloudCredentials(subscriptionId, cert);

        return cloudCredentials;
    }
    catch (Exception exception)
    {
        throw new DomainException("Could not parse publish settings file: {0}", exception.Message);
    }
}


private Stream GetCertificateString()
{
    var filePath = @"C:\Full\Path\To\file.publishsettings";

    var allBytes = File.ReadAllBytes(filePath);

    var stream = new MemoryStream(allBytes);

    return stream;
}
Другие вопросы по тегам