2009-08-26 67 views
0

最近,我们的网站托管服务提供商移动到所有共享ASP.NET网站托管的中等信任级别。因此,我们在通过PayPal的SOAP API完成交易时遇到了一些问题。具体而言,一个SecurityException异常被抛出与以下堆栈跟踪:贝宝 - ASP.NET中等信托

[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 
... 

我找到了源于贝SOAP SDK违规方法。

/// <summary> 
/// To Accept all un-trusted certificate 
/// </summary> 
private void SetTrustManager() 
{ 
    //This code is added to accept all un-trusted certificate i.e self-signed certificate 
    if (Config.Instance.TrustAll) 
    { 
     //ServicePointManager.CertificatePolicy = TrustAllCertificatePolicy.Instance; 
     ServicePointManager.CertificatePolicy = new MyPolicy();    
    } 
} // SetTrustManager 

是否有知道什么变化率(s)需要作出允许SDK在中等信任环境中发挥作用?是否有必要接受所有不可信任的证书?

谢谢。

回答

1

您可以向您的ISP询问GAC PayPal程序集 - 这样它们以完全信任的方式运行(假设它们在程序集上设置了允许部分信任的调用程序属性)。

中等信任的其他问题是它不允许传出网络连接,包括SOAP调用。

1

我的问题是读取配置文件

更换

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

通过

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; 
} 

托马斯