Bonjour à tous
Je développe une application asp.Net (je sais qu'il y a un forum dédié mais la question concerne uniquement la partie c# et .net).
Cette application doit pouvoir se connecter à une imprimante à distance.
Pour cela, j'ai choisi d'utiliser Google Cloud Print, j'utilise donc une bibliothèque de classes pour me simplifier la vie :
Bibliothèque de classes
Elle a bien été intégrée à ma solution en environnement de développement, j'ai pu imprimer, partager mes imprimantes, etc...
Le problèmes, c'est que lorsque je déploie ma solution sur mon serveur de pré-production distant, cela me génère une erreur dès que j'essaie de lister les imprimantes.
En bref, dès que l'assembly tente de fabriquer des identifiants Google pour les envoyer à Google par requête POST, cette fonction est utilisée pour toute interraction avec l'API Google donc rien ne fonctionne :
Et voici le message d'erreur que je reçois lorsque je veux utiliser l'assembly :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 private async Task<ServiceAccountCredential> Authorize() { var certificate = new X509Certificate2(_keyFilePath, _keyFileSecret, X509KeyStorageFlags.Exportable); var credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer(_serviceAccountEmail) { Scopes = new[] { "https://www.googleapis.com/auth/cloudprint" } }.FromCertificate(certificate)); await credential.RequestAccessTokenAsync(CancellationToken.None); return credential; }
Je sais que cette erreur est une erreur connue mais les explications que je trouve sur sa cause restent très floues et d'après moi, ne correspondent pas à mon cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 [CryptographicException: Invalid provider type specified. ] System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) +5291577 System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) +94 System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() +136 System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize) +203 System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() +240 Google.Apis.Auth.OAuth2.Initializer.FromCertificate(X509Certificate2 certificate) +21 GoogleCloudPrint.<Authorize>d__20.MoveNext() +221 [AggregateException: Une ou plusieurs erreurs se sont produites.] System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +4483420 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) +14135741 GoogleCloudPrint.GoogleCloudPrintService..ctor(String serviceAccountEmail, String keyFilePath, String keyFileSecret, String source) +188 PecV2.WebApp.CloudPrints.CloudPrint..cctor() +165 [TypeInitializationException: Une exception a été levée par l'initialiseur de type pour 'PecV2.WebApp.CloudPrints.CloudPrint'.] PecV2.WebApp.CloudPrints.CloudPrint.listPrinterNames() +50 PecV2.WebApp.Utilisateur.Parametres.Page_Load(Object sender, EventArgs e) +285 System.Web.UI.Control.OnLoad(EventArgs e) +109 System.Web.UI.Control.LoadRecursive() +68 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
Voici le post qui explique le mieux cette erreur : post msdn
Dès le début, il explique que cette erreur se produit avec le framework .Net 3.5 et supérieures, donc logiquement, cette erreur devrait se produire sur mon environnement de développement puisque j'utilise la même version de .Net sur mon serveur et sur ma machine mais ce n'est pas le cas.
La seconde chose qui m'étonne beaucoup, c'est que ce problème n'est pas constaté au niveau du serveur de pré-production local (IIS Local) donc l'environnement est très similaire.
La seule cause que je peux imaginer serait que le provider ne soit pas (correctement) installé sur le serveur mais dans ce cas, je ne sais pas trop vers où m'orienter.
(Je ne cherche pas forcément une réponse toute cuite mais quelques axes de réflexion m'aideraient grandement)
En tout cas, merci et bonne journée!
Nico.
Partager