2014-04-29 2 views
0

Quelqu'un pourrait-il m'aider avec cet exemple d'API REST "décrire des instances d'eucalyptus" dans C# sans utiliser AWS sdk pour .net? Je vous donne mon exemple de code. Ce code fonctionne avec aws avec succès, mais dans l'eucalyptus ils donnent une erreur "404 not found".Comment utiliser api eucalyptus REST dans C#

protected void Page_Load(object sender, EventArgs e) 
    { 
     EucaListInstance("xyx/services/Eucalyptus"); 
    } 

    private void ListEucaInstance(string inboundQueueUrl) 
    { 

     // Create a request for the URL.   
     string date = System.DateTime.UtcNow.ToString("s"); 
     string stringToSign = string.Format("DescribeInstances" + date); 
     string signature = CalculateEucaSignature(stringToSign, true); 

     StringBuilder sb = new StringBuilder(); 
     sb.Append(inboundQueueUrl); 
     sb.Append("?Action=DescribeInstances"); 
     sb.Append("&Version=2013-10-15"); 
     sb.AppendFormat("&AWSAccessKeyId={0}", m_EucaAccessKeyID); 
     sb.AppendFormat("&Expires={0}", date); 
     sb.AppendFormat("&Signature={0}", signature); 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sb.ToString()); 
     HttpWebResponse response = null; 
     Stream dataStream = null; 
     StreamReader reader = null; 

     try 
     { 
      request.Credentials = CredentialCache.DefaultCredentials; 

      response = (HttpWebResponse)request.GetResponse(); 

      // Get the stream containing content returned by the server. 
      dataStream = response.GetResponseStream(); 

      // Open the stream using a StreamReader for easy access. 
      reader = new StreamReader(dataStream); 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      // Cleanup the streams and the response. 
      if (reader != null) 
       reader.Close(); 

      if (dataStream != null) 
       dataStream.Close(); 

      if (response != null) 
       response.Close(); 
     } 

    } 

    private string CalculateEucaSignature(string data, bool urlEncode) 
    { 
     ASCIIEncoding ae = new ASCIIEncoding(); 
     HMACSHA1 signature = new HMACSHA1(ae.GetBytes(m_EucaSecretKey)); 
     string retSignature = Convert.ToBase64String(signature.ComputeHash(ae.GetBytes(data.ToCharArray()))); 
     return urlEncode ? HttpUtility.UrlEncode(retSignature) : retSignature; 
    } 

Répondre

1

Vous obtiendrez une erreur 404 si vous envoyez la demande à la mauvaise URL. Je vérifier que vous envoyez à l'URL correcte, ce qui serait typiquement le long des lignes de:

http://eucalyptus.your.domain.here.example.com:8773/services/Eucalyptus 

Vous pouvez trouver l'URL à utiliser dans votre déploiement en regardant dans votre eucarc file pour la valeur EC2_URL ou par exécuter le "euca-describe-services -T eucalyptus" admin command (dans les versions jusqu'à 4.0, à partir de 4.0, vous utiliserez "-T calculer")

+0

vous devez d'abord former l'URL .. former une URL, l'essayer dans le navigateur Web .. Si le navigateur Web répond correctement à l'aide de cette URL, créez une demande Web dans votre code pour cette URL. alors vous pouvez consommer cette API. –