2009-08-26 6 views
0

Récemment, notre fournisseur d'hébergement Web est passé à un niveau de confiance moyen pour tous les sites ASP.NET partagés. Par conséquent, nous rencontrons quelques problèmes pour effectuer des transactions via l'API SOAP de PayPal. Plus précisément, une exception SecurityException est lancée avec la trace de la pile suivante:PayPal - ASP.NET Medium Trust

[SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.] 
    System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0 
    System.Security.CodeAccessPermission.Demand() +58 
    System.Net.ServicePointManager.set_CertificatePolicy(ICertificatePolicy value) +54 
    com.paypal.sdk.core.APICallerBase.SetTrustManager() +30 
    com.paypal.sdk.core.soap.SOAPAPICaller..ctor() +14 
    com.paypal.sdk.services.CallerServices..ctor() +23 
... 

I traqué la source à la méthode en question dans le SDK SOAP images. Y a-t-il des changements qui doivent être faits pour permettre au SDK de fonctionner dans un environnement de confiance moyenne? Est-il nécessaire que tous les certificats non approuvés soient acceptés?

Merci.

Répondre

1

Vous pouvez demander à votre FAI de GAC les assemblys PayPal - de cette façon, ils fonctionnent en toute confiance (en supposant qu'ils ont l'attribut Autoriser partiellement les appelants approuvés sur l'assembly).

L'autre problème que vous rencontrerez avec Medium Trust est qu'il n'autorise pas les connexions réseau sortantes, y compris les appels SOAP.

1

Mon problème était de lire le fichier de configuration

Remplacer

public static Dictionary<string, string> GetConfig() 
{ 
    return PayPal.Api.ConfigManager.Instance.GetProperties(); 
} 

par

public static Dictionary<string, string> GetConfig() 
{ 
    var dict = new Dictionary<string, string>(); 
    dict["mode"] = "sandbox"; 
    dict["connectionTimeout"] = "360000"; 
    dict["requestRetries"] = "1"; 
    dict["clientId"] = "AXRCZ.....-NJ1asp"; 
    dict["clientSecret"] = "EFQC....x5tqD14-tf"; 
    return dict; 
} 

Thomas