2013-03-26 3 views
1

Я использую csmanage для доступа к API управления Azure. Это мой код:400: неправильный запрос

private const string subscriberID = "<id>"; 

    static void Main(string[] args) 
    { 
     // The thumbprint value of the management certificate. 
     // You must replace the string with the thumbprint of a 
     // management certificate associated with your subscription. 
     string certThumbprint = "<thumbprint>"; 

     // Create a reference to the My certificate store. 
     X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); 

     // Try to open the store. 
     try 
     { 
      certStore.Open(OpenFlags.ReadOnly); 
     } 
     catch (Exception e) 
     { 
      throw; 
     } 

     // Find the certificate that matches the thumbprint. 
     X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, certThumbprint, false); 
     certStore.Close(); 

     // Check to see if our certificate was added to the collection. If no, throw an error, if yes, create a certificate using it. 
     if (0 == certCollection.Count) 
     { 
      throw new Exception("Error: No certificate found containing thumbprint " + certThumbprint); 
     } 

     // Create an X509Certificate2 object using our matching certificate. 
     X509Certificate2 certificate = certCollection[0]; 



     var serviceManagment = ServiceManagementHelper.CreateServiceManagementChannel("WindowsAzureEndPoint", new X509Certificate2(certificate)); 
     var x = serviceManagment.ListHostedServices(subscriberID); 

     foreach (HostedService s in x) 
     { 
      Console.WriteLine(s.ServiceName); 
     } 
    } 

Это прекрасно работает в консольном приложении. Однако, когда я выполняю тот же самый код в проекте WCF (как реализация службы), я получаю 400 - Bad Request.

Что может вызвать эту ошибку?

+0

попробуйте использовать скрипач для отслеживания запросов и ответов - как из приложения консоли, так и из приложения WCF Service, проверьте разницу в запросах. – astaykov

+0

Я уже использовал скрипач. Невозможно найти никаких различий. – Bv202

+0

А как насчет ответов? Подробности ответа 400 в скрипаче должны быть немного более конкретными (иногда они есть ..) Вероятно, если вы вставляете пары Request/Response для обоих запросов, мы могли бы помочь больше. Используйте раздел «Raw» в скрипачке, чтобы получить необработанные данные из запроса и ответа. – astaykov

ответ

3

Не совсем ответ, но одна вещь, которую вы могли бы сделать, это посмотреть более подробную информацию о 400 ошибок, ловя веб-исключение, используя код, подобный следующему:

catch (WebException webEx) 
    { 
     string errorDetail = string.Empty; 
     using (StreamReader streamReader = new StreamReader(webEx.Response.GetResponseStream(), true)) 
     { 
      errorDetail = streamReader.ReadToEnd(); 
     } 
    } 

Здесь errorDetail будет XML, который должен дать вам больше информации.

+0

Но это протоколException .. – Bv202

+0

yep и служба управления Azure, как правило, дают некоторые данные о различных ошибках, которые могут быть видны только (1) Fiddler или (2) метод Gaurav. – astaykov

+0

Перемещение внутреннего исключения. Где-то в строке вы увидите исключение типа WebException. –

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