2009-09-27 59 views
0

在godaddy上使用Entity框架时,我们得到一个SecurityException。该实体已针对MySQL存储进行配置。 (v。6.1.2)有点奇怪,但例外...虽然看着异常堆栈,似乎意味着如果我们在站点的任何地方打开一个到MySQL的连接,那么我们应该得到相同的异常;然而,打开一个MySQL连接似乎直接在网站的另一部分工作...在godaddy上使用MySQL和实体框架的安全异常

这里的验证:

using (MySqlConnection connection = new MySqlConnection(ConnectionString)) 
{ 
    connection.Open(); 
    ... 
} 

任何人碰到类似问题,运行?

完整的错误堆栈跟踪如下:

[SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.] 
    System.Reflection.MethodBase.PerformSecurityCheck(Object obj, RuntimeMethodHandle method, IntPtr parent, UInt32 invocationFlags) +0 
    System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +470 
    System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +1051 
    System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +111 
    System.Resources.ResourceManager.CreateResourceSet(Stream store, Assembly assembly) +357 
    System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents) +471 
    System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents) +583 
    System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents) +583 
    System.Resources.ResourceManager.GetString(String name, CultureInfo culture) +74 
    MySql.Data.MySqlClient.Resources.get_PerfMonCategoryName() +40 
    MySql.Data.MySqlClient.PerformanceMonitor..ctor(MySqlConnection connection) +43 
    MySql.Data.MySqlClient.MySqlConnection.Open() +434 
    System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) +173 
    System.Data.EntityClient.EntityConnection.Open() +96 
    System.Data.Objects.ObjectContext.EnsureConnection() +81 
    System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +46 
    System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +44 
    jet.Controllers.WorkOrder.WorkOrderView..ctor() +219 
    jet.Controllers.WorkOrder.WorkOrderView.get_Instance() +29 
    jet.Controllers.WorkItemController.Index() +11 
    lambda_method(ExecutionScope , ControllerBase , Object[]) +39 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24 
    System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +53 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258 
    System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +382 
    System.Web.Mvc.Controller.ExecuteCore() +123 
    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23 
    System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54 
    System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 
+3

我投票关闭这一问题作为题外话,因为我们不是GoDaddy的客户支持。 – 2016-08-16 08:52:45

回答

2

Justin被点亮了。问题是godaddy在他们的gac中有一个旧版本的MySql dll,实体框架正在挑选它!

这是修复程序。 (应用此web.config文件)

<configuration> 
    ... 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d"/> 
     <bindingRedirect oldVersion="5.0.7.0" newVersion="6.1.2.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    ... 
</configuration> 
+0

很高兴帮助。顺便说一句,随时upvote我的答案,如果它帮助你! :-) – 2009-10-04 23:25:03

3

怪异之一。 GoDaddy共享托管的ASP.NET应用程序在Medium Trust下执行,并且perf计数器的创建可能需要完全信任,但是perf计数器的创建不是失败的。 (如果失败了,它不会传播出去,因为perf coutner创建异常被mySQL客户端代码吞噬)。

相反,它在创建perf计数器之前尝试访问字符串资源失败。该故障是在MySQL客户端的Resources.Designer.cs这行代码:

return ResourceManager.GetString("PerfMonCategoryName", resourceCulture) 

有几件事情来尝试,在困难的顺序增加:

  1. 确保你有MySQL的客户端DLL位于应用程序的BIN目录中,而您并未尝试从GoDaddy的GAC中加载客户端DLL。如果你可以避免它,永远不要依赖GoDaddy提供的二进制文件!

  2. 切换到EN-US文化,以便客户端不必去寻找另一个资源DLL,并查看问题是否消失。

  3. 从源代码构建.NET客户端,而不是将DLL从二进制分发版复制到应用程序的BIN目录中。这会使这样的问题更容易调试,因为mySQL代码不会是黑盒子。而且,在一个捏,会让你改变有问题的资源获取调用(或硬编码的语言环境)! :-)

顺便说一句,如果你想在你的连接字符串中设置“Use Performance Monitor = false”来避免这个问题,不要麻烦。不管该设置如何,有问题的代码都会被执行:

public PerformanceMonitor(MySqlConnection connection) 
    { 
     this.connection = connection; 

     //// this line is where it bombs 
     string categoryName = Resources.PerfMonCategoryName; 

     //// this line is affected by connection string setting 
     if (connection.Settings.UsePerformanceMonitor && procedureHardQueries == null) 
     { 
      try 
      { 
       procedureHardQueries = new PerformanceCounter(categoryName, 
                   "HardProcedureQueries", false); 
       procedureSoftQueries = new PerformanceCounter(categoryName, 
                   "SoftProcedureQueries", false); 
      } 
      catch (Exception ex) 
      { 
       Logger.LogException(ex); 
      } 
     } 
    } 
1

我只是增加信任级别=“完全”我的网络配置文件,它的工作

+0

魔法!刚刚工作。 – 2015-11-13 03:34:55