2016-04-04 28 views
0

ile iletişim kuramıyorum Şu anda Linux örnekleri üzerinde Mono aracılığıyla çalışan bir C# uygulaması geliştiriyorum. Görüntülerin işlenmesi tamamlandığında Google Cloud Storage'da depolanması gerekir.C#/Mono'da, google bulut depolama alanı

Kimlik denetimi ayarları var ve .NET istemci kitaplığı StorageService nesnesini ayarlayabiliyor (örn. JSON dosyasını bulun ve her şeyi doğrulayın). Yüklemeye çalıştığımda hiçbir şey olmadı. Benim SetupConnection() işlevimde, projemde sahip olduğum tek kepçeyi sorgulamaya çalıştım. Daha önce GCS konuşmak C# almak mümkün oldum

public static void SetupGCSConnection() 
{ 
    var credentials = Google.Apis.Auth.OAuth2.GoogleCredential.GetApplicationDefaultAsync().Result; 

    if (credentials.IsCreateScopedRequired) 
     credentials = credentials.CreateScoped(new[] { StorageService.Scope.DevstorageFullControl }); 

    var serviceInitializer = new BaseClientService.Initializer() 
    { 
     ApplicationName = "MyApp", 
     HttpClientInitializer = credentials 
    }; 

    storage = new StorageService(serviceInitializer); 

    // Error is thrown here 
    var buckets = storage.Buckets.List(Config.GoogleProjectID).Execute(); 
    foreach (var b in buckets.Items) { 
     Console.WriteLine(b.ToString()); 
    } 
} 

, ancak bir Windows ortamında çalışırken olmasıydı:

Unhandled Exception: 
System.Net.WebException: Error writing request: The authentication or decryption has failed. 
    at System.Net.WebConnectionStream.WriteHeaders() [0x00000] in <filename unknown>:0 
    at System.Net.WebConnectionStream.SetHeaders (System.Byte[] buffer) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.Net.WebConnectionStream:SetHeaders (byte[]) 
    at System.Net.HttpWebRequest.SendRequestHeaders (Boolean propagate_error) [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Http.ConfigurableMessageHandler+<SendAsync>d__43.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at System.Net.Http.HttpClient+<SendAsyncWorker>c__async0.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.Requests.TokenRequestExtenstions+<ExecuteAsync>d__0.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[Google.Apis.Auth.OAuth2.Responses.TokenResponse].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceAccountCredential+<RequestAccessTokenAsync>d__19.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Boolean].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceCredential+<GetAccessTokenForRequestAsync>d__23.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.String].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceAccountCredential+<GetAccessTokenForRequestAsync>d__20.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.String].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceCredential+<InterceptAsync>d__21.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Http.ConfigurableMessageHandler+<SendAsync>d__43.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at System.Net.Http.HttpClient+<SendAsyncWorker>c__async0.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Requests.ClientServiceRequest`1+<ExecuteUnparsedAsync>d__26[Google.Apis.Storage.v1.Data.Buckets].MoveNext() [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.Net.WebException: Error writing request: The authentication or decryption has failed. 
    at System.Net.WebConnectionStream.WriteHeaders() [0x00000] in <filename unknown>:0 
    at System.Net.WebConnectionStream.SetHeaders (System.Byte[] buffer) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.Net.WebConnectionStream:SetHeaders (byte[]) 
    at System.Net.HttpWebRequest.SendRequestHeaders (Boolean propagate_error) [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Http.ConfigurableMessageHandler+<SendAsync>d__43.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at System.Net.Http.HttpClient+<SendAsyncWorker>c__async0.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.Requests.TokenRequestExtenstions+<ExecuteAsync>d__0.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[Google.Apis.Auth.OAuth2.Responses.TokenResponse].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceAccountCredential+<RequestAccessTokenAsync>d__19.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Boolean].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceCredential+<GetAccessTokenForRequestAsync>d__23.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.String].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceAccountCredential+<GetAccessTokenForRequestAsync>d__20.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.String].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceCredential+<InterceptAsync>d__21.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Http.ConfigurableMessageHandler+<SendAsync>d__43.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at System.Net.Http.HttpClient+<SendAsyncWorker>c__async0.MoveNext() [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
    at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult() [0x00000] in <filename unknown>:0 
    at Google.Apis.Requests.ClientServiceRequest`1+<ExecuteUnparsedAsync>d__26[Google.Apis.Storage.v1.Data.Buckets].MoveNext() [0x00000] in <filename unknown>:0 

İşte benim kurulum kod: bu hata var Microsoft'un .NET vm ile. Daha önce biraz araştırma yaptım ve Mono'nun Microsoft'un VM'sine karşı CA'ları nasıl kullandığıyla ilgili bazı sorunlar olabilir.

+0

Hangi versiyonu Mono? Terminalde 'mono --version' çalıştırın. –

+0

Bu '' Mono JIT derleyici sürüm 3.2.8' – Benjamin

+0

çok eski. İlk olarak kendi sitesini inceleyerek yükseltin, http://www.mono-project.com/ –

cevap

0

Sorununuz genellikle güncelleştirilmeyen kök sertifikalarından geliyor.

Kök sertifikalarınızı güncellemek için here numaralı yönergeleri izleyin.

o zaman tüm sertifikaları

ServicePointManager.ServerCertificateValidationCallback 

için bir temsilci ayarlayabilir ve kabul edebilir yardımcı olur etmezse. Bu işe yararsa, sorunun sertifika doğrulama üzerinde olduğunu ve başka bir çözümü deneyebileceğinizi biliyorsunuz. (Üretimde tüm sertifikaları kabul etmek için geri arama özelliğini kullanmanızı tavsiye etmeyeceğim, sadece sorununuzu ayıklamak için kullanın).

İlgili konular