2011-12-14 4 views
3

Je suis relativement nouveau dans l'utilisation de l'API azure service mangemement. J'essaye d'utiliser l'opération de déploiement de swap mais je continue à recevoir une erreur que je suis incapable de réparer. Je vais peut-être aller à propos de cette opération tout à fait fausse que je suis nouveau à l'azur. Toute aide est très appréciée.Windows Azure service mgmt API Swap numéro

L'erreur que je reçois est le suivant

<Error xmlns=\"http://schemas.microsoft.com/windowsazure\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><Code>ResourceNotFound</Code><Message>The resource service name hostedservices is not supported. If it is a new partner service please ensure that the service is registered in RDFE.</Message></Error>" 

Voici mon code, j'ai indiqué dans ce où l'exception se produit

public void swapDeployment() 
    { 

     String operationName = "hostedservices"; 
     String prodName = "HealthMonitor - 21/10/2011 22:36:08"; 
     String sourceName = "SwapTestProject - 13/12/2011 22:23:20"; 

     Uri swapURI = new Uri("https://management.core.windows.net/" 
          + subscriptionId 
          + "/services/" 
          + "hostedservices" 
          + "/stevenRiordanHello/"); 

     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>"+prodName+"/Production><SourceDeployment>"+sourceName+"</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); 
     } 
     try 
     { 
      //exception is caught at the end of the line below 
      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); 
       } 
      } 
     } 
     catch(WebException e) 
     { 
      StreamReader sr = new StreamReader(e.Response.GetResponseStream()); 
      string errorText = sr.ReadToEnd(); 
     } 
    } 

Répondre

1

Il est probable que votre nom de service a des lettres majuscules dedans. Tout devrait être en minuscules. Cependant, cela étant dit ... y a-t-il une raison pour que vous n'utilisiez pas simplement l'exemple de client au lieu de lancer votre propre client HTTP?

Mise à jour de cette réponse: Vous devez avoir un code XML valide, mais les paramètres qui s'y rapportent sont également le nom du déploiement. C'est une de ces choses rarement utilisées. C'est généralement un GUID. La seule façon d'obtenir réellement cette information est d'utiliser l'appel GetDeployment ou l'appel GetHostedService avec des détails sur les déploiements. Dans cette réponse, vous verrez le nom. Ce nom est définitivement différent de tout ce que vous avez fourni (je pense que vous utilisez l'étiquette).

+0

Merci pour la réponse, j'ai changé le nom du service à tous les minuscules et je reçois toujours la même erreur. Mon code est basé sur le code d'ici http://msdn.microsoft.com/en-us/library/windowsazure/ee460782.aspx qui répertorie vos services hébergés.Ce code a fonctionné pour moi. Mais ce code je sais est pour un GET, où l'opération de déploiement d'échange est un POST. – StevenR

+0

Ok, est-ce alors à cause d'un XML invalide? voir: "" + prodName + "/ Production>" Encore ... pourquoi n'utilisez-vous pas les applets de commande ou l'exemple de client dans csmanage? – dunnry

+0

Oh applaudissements pour avoir repéré ça, mais je reçois toujours la même erreur. Et je suis seulement un étudiant et je ne sais pas réellement sur "cmdlets ou exemple de client dans csmanage" – StevenR

Questions connexes