Я пытаюсь выполнить операцию развертывания подкачки в C # на размещенной службе, которую я имею в облаке Azure.Мой код не возвращает ошибок, однако своп никогда не выполняется.
Мой код основан на примере кода с веб-сайта Microsoft о том, как выполнить операцию со списком служб, использующую GET, однако при развертывании свопа используется POST.
Я новичок в этом, так что возможно я делаю это совершенно неправильно.Любая помощь приветствуется.
Вот мой код на данный момент:
public void swapDeployment()
{
string operationName = "hostedservices";
Uri swapURI = new Uri("https://management.core.windows.net/"
+ subscriptionId
+ "/services/"
+ operationName+"/"
+serviceName);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(swapURI);
request.Headers.Add("x-ms-version", "2009-10-01");
request.Method = "POST";
request.ContentType = "application/xml";
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <Swap xmlns=\"http://schemas.microsoft.com/windowsazure\"><Production>HealthMonitor - 21/10/2011 22:36:08</Production><SourceDeployment>SwapTestProject - 13/12/2011 22:23:20</SourceDeployment></Swap>";
byte[] bytes = Encoding.UTF8.GetBytes(xml);
request.ContentLength = bytes.Length;
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 (0 == certCollection.Count)
{
throw new Exception("Error: No certificate found containing thumbprint " + thumbprint);
}
X509Certificate2 certificate = certCollection[0];
request.ClientCertificates.Add(certificate);
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
{
string message = String.Format( "POST failed. Received HTTP {0}",response.StatusCode);
throw new ApplicationException(message);
}
}
}
// Error shown at: using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
// Saying: The remote server returned an error: (404) Not Found.
РЕДАКТИРОВАТЬ: Я думаю, что моей основной проблемой является строка string xml=
.Запрашивается имя производства и имя развертывания.Я думал, у меня был только один!Может кто-нибудь уточнить, что я должен здесь вставить ??
Спасибо