2014-01-15 3 views
0

Windows Azure SDK for .NET을 사용하여 모든 가상 컴퓨터 목록을 가져오고 싶습니다.Azure .NET SDK - 인증에 실패한 모든 가상 컴퓨터 나열

// This is a custom cert I made locally. I uploaded it to Azure's Management Certificates and added it to my local computer's cert store, see screenshot below. 
X509Certificate2 myCustomCert = await this.GetAzureCert(); 
var credentials = new CertificateCloudCredentials(mySubscriptionId, myCustomCert); 

using (var cloudServiceClient = CloudContext.Clients.CreateCloudServiceManagementClient(credentials)) 
{ 
    credentials.InitializeServiceClient(cloudServiceClient); // Is this required? The next call fails either way. 

    // This line fails with exception: "The server failed to authenticate the request. Verify that the certificate is valid and is associated with this subscription." 
    var services = await cloudServiceClient.CloudServices.ListAsync(CancellationToken.None); 
} 

내 첫번째 생각은 인증서가 나쁜이었다, 그러나 나는 성공적으로 내 사용자 지정 인증서를 사용하여 푸른 REST API를 호출 할 수 있어요 :

초기 문서를 조립할, 여기에 내가 생각 해낸거야. 아래에서 볼 수 있듯이, 제대로 내 가입과 푸른 관리 인증서에 추가하고 관련이 : 내가 잘못 뭐하는 거지

enter image description here

?

답변

3

다른 옵션이 있습니다. 인증서를 업로드하는 대신 publishsettings 파일에서 관리 인증서를 가져오고 바이트 []를 사용하는 X509Certificate 생성자를 사용하십시오. 그런 다음이 매개 변수를 Convert.FromBase64String에 대한 호출 결과로 전달하고 publishsettings 파일에서 관리 인증서의 문자열 표현을 전달합니다.

또한 Cloud Service Management 클라이언트가 아닌 Compute 관리 클라이언트를 살펴보십시오. 현재이 클라이언트의 컴퓨팅 스택과 관련된 기능이 더 많습니다. 아래 코드는 이러한 접근 방식을 보여줍니다. 참고로, _subscriptionId 및 _managementCert 필드는 모두 문자열이며 위에서 설명한대로 내 publishsettings 파일의 값을 하드 코딩합니다.

public async static void ListVms() 
{ 
    using (var client = new ComputeManagementClient(
     new CertificateCloudCredentials(_subscriptionId, 
      new X509Certificate2(Convert.FromBase64String(_managementCert))) 
     )) 
    { 
     var result = await client.HostedServices.ListAsync(); 
     result.ToList().ForEach(x => Console.WriteLine(x.ServiceName)); 
    } 
} 
+0

당신은 락, 브래디! # winning –

+0

땀이 전혀 들지 않습니다. 다른 이상한 점이 있으면 주저하지 말고 연락하십시오. GitHub 사이트를 통해 문제를 신고 할 수도 있습니다. –

1

확장 메서드 인 매개 변수없는 ListAsync 메서드가 있습니다. Microsoft.WindowsAzure.Management 네임 스페이스 (또는 Microsoft.WindowsAzure.Management.Compute 네임 스페이스)를 가져와보십시오. 매개 변수없는 ListAsync 메서드를 보았 으면 좋을 것입니다. 나는 또한 당신이 성취하고자하는 것을 닮은 코드를 모의하고 하루가 끝날 때까지보다 포괄적 인 대답을 제시 할 것입니다.

+0

또한 InitializeServiceClient 호출이 필요하지 않습니다. 귀하의 질문을 완전히 철저히 읽으신다면 귀하의 인증서가 완전히 인출되지 않았을 수도 있습니다. 여기에 아이디어가 있습니다. 게시 설정 파일을 잡고 열어보십시오. 해당 구독에 대한 파일에서 구독 ID와 Base64로 인코딩 된 cert 문자열을 찾아서 시도하십시오. 제대로 작동하면 인증서가 올바르게 착륙하지 않았 음을 확인합니다. 다시 말하지만, 오늘 좀 더 자세히 설명하기 위해 일부 코드를 작성 하겠지만 "내부 질문"에 대답하고 싶습니다. :) –

+0

좋아, 내가 그 총을 줘 당신에게 알려 드리겠습니다. 이렇게 빨리 도움을 주셔서 감사합니다. –

+0

base64로 인코딩 된 관리 cert 문자열을 복사하여 사용했습니다. 이제는 왜 내 인증서가 작동하지 않는지, 그 인증서가 작동하는지 파악해야합니다. –

관련 문제