2012-03-14 3 views
1

Я пытаюсь загрузить файл конфигурации с помощью azure management api. Я получаю ошибку 400 ошибок, и я не могу понять, почему, какие-либо предложения?Azure Service Mgmt Изменение конфигурации Api (ошибка 400 ошибочного запроса)

Вот документ API для операции изменения конфигурации. http://msdn.microsoft.com/en-us/library/windowsazure/ee460809.aspx

И вот мой код. Любые ошибки были очень благодарны

public void changeConfiguration(string serviceName, string deploymentSlot, string config, string deploymentName) 
    { 
     byte[] encodedConfigbyte = new byte[config.Length]; 
     encodedConfigbyte = System.Text.Encoding.ASCII.GetBytes(config); 
     string temp = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(config)); 

     Uri changeConfigRequestUri = new Uri("https://management.core.windows.net/" + subscriptionId + "/services/hostedservices/" + serviceName + "/deploymentslots/" + 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>" + temp + "</Configuration>    </ChangeConfiguration>"; 

     byte[] buf = Encoding.ASCII.GetBytes(bodyText); 
     request.ContentType = "application/xml"; 
     request.ContentLength = buf.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 (certCollection.Count == 0) 
     { 
      throw new Exception("Error: No certificate found containing thumbprint "); 
     } 
     X509Certificate2 certificate = certCollection[0]; 
     request.ClientCertificates.Add(certificate); 
     Stream dataStream = request.GetRequestStream(); 

     dataStream.Write(buf, 0, buf.Length); 

     dataStream.Close(); 

      //Error occurs in the line below 
      WebResponse response = (HttpWebResponse)request.GetResponse(); 

    } 

} 

ответ

1

Нет ответа для тела с сервера?

Похоже, что когда вы создаете свой URL-адрес, вы используете «deploymentName», где хотите «deploySlot». Может ли это так?

+0

Спасибо за ответ, я не уверен относительно тела ответа, но в документации говорится, что я могу использовать либо имя развертывания, либо слот развертывания – StevenR

+0

Но если вы используете имя развертывания, то URL-адрес должен выглядеть так: 'https : //management.core.windows.net/ <подписка-id>/services/hostedservices/<имя-службы>/развертывания/<имя-развертывания> /? comp = config' Ваш URL-адрес выглядит так, как тот, который использует развертывание слот. – smarx

+0

Хорошо, вы были правы, у меня был неправильный URL-адрес, однако я изменил его на 'Uri changeConfigRequestUri = new Uri (" https://management.core.windows.net/ "+ subscriptionId +"/services/hostedservices/"+ serviceName +"/deployments/"+ deploymentName +" /? comp = config ");' и я все еще получаю ошибку 400 с ошибкой – StevenR

Смежные вопросы