Frage

Wir bekommen eine SecurityException wenn Entity Framework auf GoDaddy verwenden. Die Einheit wurde gegen einen MySQL Speicher konfiguriert ist. (V. 6.1.2) Ein bisschen Verrücktheit, mit der Ausnahme, obwohl ... bei Ausnahme der Suche stapelt es scheint zu implizieren, dass, wenn wir eine Verbindung zu MySQL auf der gesamten Webseite zu öffnen, dann sollten wir die gleiche Ausnahme erhalten; jedoch scheint eine MySQL-Verbindung öffnet sich direkt in einem anderen Teil der Website zu arbeiten ...

Hier ist die Prüfung:

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

Wer über ein ähnliches Problem laufen?

Der komplette Fehler-Stack-Trace ist wie folgt:

[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
War es hilfreich?

Lösung 2

Justin war genau das Richtige. Problem war GoDaddy hat eine ältere Version des MySQL-DLL in ihrer Gac und der Entity Framework wurde Kommissionierung it up!

Hier ist die Lösung. (Wenden Sie diese auf 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>

Andere Tipps

Schräge ein. GoDaddy Shared-Hosting ASP.NET-Anwendungen unter Medium Trust auszuführen und perf Zähler Schöpfung erfordert wahrscheinlich volles Vertrauen, aber perf Zähler Schöpfung ist nicht, was hier versagt. (Und wenn es scheitert, wäre es nicht propagieren aus, da perf coutner Schaffung Ausnahmen von mySQL-Client-Code verschluckt werden).

Stattdessen es andernfalls versucht, eine Zeichenfolge-Ressource zuzugreifen, bevor perf Zähler Schöpfung. Der Fehler ist mit dieser Codezeile in Resources.Designer.cs des MySQL-Client:

return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)

Ein paar Dinge zu versuchen, um mit steigendem Schwierigkeitsgrad:

  1. sicherzustellen, dass Sie den MySQL-Client-DLLs in Ihrer App IST-Verzeichnis haben und Sie versuchen, nicht den Client-DLL aus GoDaddys GAC zu laden. Nie hängt von GoDaddy gelieferten Binär-Dateien, wenn Sie es vermeiden können!

  2. Umstellung auf EN-US-Kultur, damit der Client muss nicht gehen für eine andere Ressource DLL Jagd, und sehen, ob das Problem verschwindet.

  3. Erstellen Sie den .NET-Client aus dem Quellcode, anstelle von DLLs aus einer binären Verteilung in Ihre App IST-Verzeichnis zu kopieren. Dies wird wie diese macht Probleme leichter zu debuggen, da der mySQL-Code wird keine Blackbox sein. Und in einer Prise, lassen Sie die problematischen Ressource-Abrufen Anrufe ändern (oder schwer Code der locale)! : -)

BTW, falls Sie sich in Versuchung „Use Performance Monitor = false“ in der Verbindungszeichenfolge zu setzen, um zu versuchen, das Problem zu umgehen, nicht die Mühe. Der problematische Code ausgeführt wird, unabhängig von dieser Einstellung:

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

ich einfach hinzugefügt trust level = "Full" auf meiner Web-Konfigurationsdatei, und es funktionierte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top