Je suis un étudiant et j'essaie de créer une application qui permet à un utilisateur de modifier le nombre d'instances de son service hébergé sur Azure. Ceci est fait mon téléchargement d'un nouveau fichier de configuration pour le service (http://msdn.microsoft.com/en-us/library/windowsazure/ee460809.aspx). Mon problème est que je continue à obtenir l'erreur "Le serveur distant a renvoyé une erreur: (403) Interdit" quand j'essaye d'obtenir une réponse dans le code ci-dessous. J'ai supposé que l'erreur devait être quelque chose à faire avec des certificats mais je peux effectuer Obtenez les demandes avec succès et obtenez la réponse correcte en utilisant le même certificat que j'utilise ici. Toute aide est grandement appréciée.config est le nouveau fichier de configuration.Configuration de la configuration de l'API de gestion des services Azure
changeConfiguration public void (string serviceName, chaîne deploymentSlot, config string, string deploymentName)
{
byte[] encodedConfigbyte = new byte[config.Length];
encodedConfigbyte = System.Text.Encoding.UTF8.GetBytes(config);
string encodedConfig = Convert.ToBase64String(encodedConfigbyte);
Uri changeConfigRequestUri = new Uri("https://management.core.windows.net/" + subscriptionId + "/services/hostedservices/" + serviceName + "/deployments/" + deploymentName + "/?comp=config)");
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(changeConfigRequestUri);
request.Headers.Add("x-ms-version", "2010-10-28");
request.Method = "POST";
string bodyText = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<ChangeConfiguration xmlns=\"http://schemas.microsoft.com/windowsazure" + ">" + "<Configuration>" + encodedConfig + "</Configuration>" + "<TreatWarningsAsError>false</TreatWarningsAsError>" + "<Mode>Auto</Mode>"+"</ChangeConfiguration>";
byte[] buf = Encoding.UTF8.GetBytes(bodyText);
request.ContentType = "text/xml";
request.ContentLength = buf.Length;
StreamWriter writer = new StreamWriter(request.GetRequestStream());
var data = Encoding.ASCII.GetBytes(buf.ToString());
writer.Write(data);
writer.Flush();
writer.Close();
X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
certStore.Open(OpenFlags.ReadOnly);
}
catch (Exception e)
{
if (e is CryptographicException)
{
Console.WriteLine("Error: The store is unreadable.");
}
else if (e is SecurityException)
{
Console.WriteLine("Error: You don't have the required permission.");
}
else if (e is ArgumentException)
{
Console.WriteLine("Error: Invalid values in the store.");
}
else
{
throw;
}
}
X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
certStore.Close();
if (certCollection.Count == 0)
{
throw new Exception("Error: No certificate found containing thumbprint " + thumbprint);
}
X509Certificate2 certificate = certCollection[0];
request.ClientCertificates.Add(certificate);
//Error occurs in line below
WebResponse response = (HttpWebResponse)request.GetResponse();
try
{
response = request.GetResponse();
}
catch (WebException e)
{
string test = e.Message;
}