2009-09-27 6 views
0

Nous obtenons un SecurityException lors de l'utilisation Entity Framework sur godaddy. L'entité a été configurée par rapport à un magasin MySQL. (v 6.1.2) Un peu de bizarrerie à l'exception cependant ... En regardant la pile des exceptions, il semble impliquer que si nous ouvrons une connexion à MySQL n'importe où dans le site, alors nous devrions obtenir la même exception; Cependant, l'ouverture d'une connexion MySQL semble directement travailler dans une autre partie du site ...Exception de sécurité à l'aide de MySQL et Entity Framework sur godaddy

Voici la vérification:

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

Toute personne courir à travers un problème similaire?

La trace de pile d'erreur complet est le suivant:

[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

Je vote pour fermer cette question hors sujet parce que nous ne sont pas le support client de GoDaddy. –

Répondre

2

Justin était sur place. Le problème était Godaddy a une version plus ancienne de la DLL MySql dans leur gac et le cadre de l'entité était le ramasser!

Voici le correctif. (Appliquer ce à 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

heureux d'aider. BTW, n'hésitez pas à upvote ma réponse si cela vous a aidé! :-) –

3

une bizarre. Les applications ASP.NET GoDaddy à hébergement mutualisé s'exécutent sous Trust moyen, et la création d'un compteur de perfs nécessite probablement une confiance totale, mais la création de compteurs de performances n'est pas ce qui échoue ici. (et s'il échouait, il ne se propagerait pas puisque les exceptions de création de cout coutner sont avalées par le code client mySQL). Au lieu de cela, il échoue à essayer d'accéder à une ressource de chaîne, avant la création du compteur de perf. L'échec est avec cette ligne de code dans Resources.Designer.cs du client MySQL:

return ResourceManager.GetString("PerfMonCategoryName", resourceCulture) 

Quelques choses à essayer, dans l'ordre croissant de difficulté:

  1. vous assurer que vous avez le MySQL DLL du client dans le répertoire BIN de votre application et vous n'essayez pas de charger la DLL du client à partir du GAC de GoDaddy. Ne dépendez jamais des binaires fournis par GoDaddy si vous pouvez l'éviter!

  2. passez à la culture EN-US pour que le client n'ait pas besoin de rechercher une autre DLL de ressource et de voir si le problème disparaît.

  3. Créez le client .NET à partir du code source, au lieu de copier des DLL à partir d'une distribution binaire dans le répertoire BIN de votre application. Cela facilitera le débogage de tels problèmes car le code mySQL ne sera pas une boîte noire. Et, à la rigueur, vous permettra de modifier les appels problématiques de récupération de ressources (ou de coder en dur les paramètres régionaux)! :-)

BTW, si vous êtes tenté de régler « Utiliser Performance Monitor = false » dans votre chaîne de connexion pour essayer d'échapper à ce problème, ne vous embêtez pas. Le code problématique est exécuté indépendamment de ce paramètre:

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

I niveau de confiance simplement ajouté = « Full » à mon fichier de configuration Web, et il a travaillé

+0

Magic! Juste travaillé. –