我有一個SSRS報告引用一個dll程序集,其中一個類應調用存儲過程但返回此錯誤。.NET Framework 4.5安全性:SSRS調用C#中的程序集生成錯誤
請求'System.Data.SqlClient.SqlClientPermission,system.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'類型權限失敗。
我不知道C#,但在一些朋友和同事的幫助下一直在徘徊。一個讓我補充:
using System.Security.Permissions;
SqlClientPermission oPerm = new SqlClientPermission(PermissionState.Unrestricted);
oPerm.Assert();
到類,我得到這個錯誤: 無法執行CAS的安全透明的方法
領導讓我看看.NET 4.0之後發生了什麼變化斷言。我刪除了SQLClientPermissions位並將其添加到AssemblyInfo中:
[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: SecurityCritical()]
其中返回了原始錯誤。這是類:
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Security;
using System.Security.Permissions;
namespace ClassLibrary1
{
public class Class1
{
public static string logReportAttributes(string ReportName, int GlobalsTotalPages)
{
string retValue = String.Empty;
try
{
long TOCExecutionID = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmss"));
SqlConnection connection = new SqlConnection("Persist Security Info=True;Trusted_Connection=True;initial catalog=InternalApps;data source=DEVSQL1;User ID=xxxxx;password=xxxxx;MultipleActiveResultSets=true;");
using (SqlCommand cmd = new SqlCommand("usp_LogReportAttributes", connection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ReportName", ReportName);
cmd.Parameters.AddWithValue("@GlobalsTotalPages", GlobalsTotalPages);
connection.Open();
cmd.ExecuteNonQuery();
}
if (connection.State == ConnectionState.Open || connection.State == ConnectionState.Broken)
{
connection.Close();
}
retValue = "Sent Successfully";
}
catch (Exception ex)
{
retValue = string.Format ("{0} \n\r {1}" , ex.Message != null ? ex.Message : "" , ex.InnerException != null ? ex.InnerException.Message : "");
}
return retValue;
}
}
}
有沒有人有任何想法我做錯了什麼,以及如何獲得正確的安全設置呢?謝謝!