2010-11-25 4 views
0

Ich habe ein vb.net-Projekt (.net 4) geschrieben, das perfekt auf meinem Windows 7-Rechner zu funktionieren scheint, und scheint gut zu funktionieren, wenn es auf einem Windows Server 2003-Server veröffentlicht wird .Nach jedem Recycling eines Worker-Prozesses tritt anscheinend ein .net-Fehler auf. Nur wenn ich entity-framework verwende

Das Problem kommt nach ein paar Stunden auf meinem Server, ich bekomme die berüchtigten "nicht in der Lage, einen oder mehrere der angeforderten Typen zu laden. Holen Sie die LoaderExceptions-Eigenschaft für weitere Informationen". Ich habe dieses Problem bei Verwendung von Visual Studio überhaupt nicht gesehen.

Das scheint mir zu sagen, dass ein Verweis auf eine DLL/etwas aufgrund eines Cache-Prozesses verloren geht. Das Hochladen von irgendetwas zu diesem Ordner behebt das Problem (einschließlich einer test.txt-Datei) vorübergehend. Nach einigen Stunden kehrt das Problem zurück.

Ich habe die Indexierung der Suche auf dem Server deaktiviert und versichert, dass der Server auf dem neuesten Stand ist. Aber der Fehler wird immer wieder angezeigt. (bei Untersuchung wird jedes Mal, wenn der Worker-Prozess wiederverwendet wird, zurückgegeben)

Das Problem scheint nur bei bestimmten ascx-Dateien aufzutreten. Diese Dateien verweisen auf eine EntityDataSource, die auf eine Befehlstabelle verweist.

Auch habe ich versucht, die Loaderexceptions zu erhalten und alle anderen Daten mit dem folgenden Code:

Try 
    OrdersTable.DataBind() 
Catch ex As ReflectionTypeLoadException 
    Response.Write(ex.Message) 

    If (Not ex.InnerException Is Nothing) Then 
     Response.Write(ex.InnerException.Message) 

     Response.Write(ex.LoaderExceptions) 
     For Each Parameter As DictionaryEntry In ex.Data 
      Dim key As Object = Parameter.Key 
      Dim value As Object = Parameter.Value 
      Response.Write(key & ":" & value & "<br>\n") 
     Next 

    End If 
    Response.End() 
End Try 

Alles geschrieben wird, sind die gleichen Fehler wie vor „Kann eine oder mehrere zu laden ...“

Neu im .net-Framework, so dass alle Vorschläge sehr geschätzt werden :).

Bearbeiten: Stack-Trace angehängt.

[ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.] 
System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) +0 
System.Reflection.RuntimeModule.GetTypes() +4 
System.Reflection.Assembly.GetTypes() +78 
System.Data.Metadata.Edm.ObjectItemConventionAssemblyLoader.LoadTypesFromAssembly() +32 
System.Data.Metadata.Edm.ObjectItemAssemblyLoader.Load() +25 
System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, ObjectItemLoadingSessionData loadingData) +160 
System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, KnownAssembliesSet knownAssemblies, EdmItemCollection edmItemCollection, Action1 logLoadMessage, Object& loaderCookie, Dictionary2& typesInLoading, List1& errors) +166 
System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection, Action1 logLoadMessage) +316 
System.Data.Metadata.Edm.ObjectItemCollection.ExplicitLoadFromAssembly(Assembly assembly, EdmItemCollection edmItemCollection, Action1 logLoadMessage) +53 
System.Data.Metadata.Edm.MetadataWorkspace.ExplicitLoadFromAssembly(Assembly assembly, ObjectItemCollection collection, Action1 logLoadMessage) +93 
System.Data.Metadata.Edm.MetadataWorkspace.LoadFromAssembly(Assembly assembly, Action1 logLoadMessage) +130 
System.Web.UI.WebControls.EntityDataSourceView.ConstructContext() +585 
System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +76 
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +21 
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143 
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74 
System.Web.UI.WebControls.GridView.DataBind() +4 
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66 
System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +75 
System.Web.UI.Control.EnsureChildControls() +102 
System.Web.UI.Control.PreRenderRecursiveInternal() +42 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2496 
+0

Dump den Stack-Trace vielleicht? –

+0

Aus der Sicht Ihres Problems wird Ihr Problem durch Zurücksetzen des Anwendungspools "gelöst". Erstellen Sie während der Laufzeit Ihrer Anwendung überhaupt neue ASPX/ASCX-Dateien? –

+0

Der Stacktrace hinzugefügt, nicht sicher, was es daraus zu machen tbh. –

Antwort

0

Am Ende war die Lösung, die für mich am einfachsten war, nicht zu tun, was den Fehler verursacht hat.

Ich bin jetzt keine Daten zur Entwurfszeit binden.

<asp:GridView ID="InvoiceTable" runat="server" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Invoice_No" 
    DataSourceID="Invoices" CellPadding="4" ForeColor="#333333" 
    GridLines="None"> 
    ....[skiped for brevity] 
</asp:GridView> 
</div> 
<asp:EntityDataSource ID="Invoices" runat="server" 
    ConnectionString="name=VetlabEntities1" DefaultContainerName="VetlabEntities1" 
    EnableFlattening="False" EntitySetName="SALES_MASTER"> 
</asp:EntityDataSource> 

Wird

<asp:GridView ID="InvoiceTable" runat="server" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Invoice_No" 
    DataSourceID="Invoices" CellPadding="4" ForeColor="#333333" 
    GridLines="None"> 
    ....[skiped for brevity] 
</asp:GridView> 

Protected Sub BindInvoice() 
    Dim db As New VetlabEntities1 
    InvoiceTable.DataSource = db.SALES_MASTER 
    InvoiceTable.DataBind() 
End Sub 

Es bedeutet auch, dass ich jetzt behandeln Löschen/Auswahl usw. selbst, das ist ein wenig irritierend ist jedoch überschaubar.

0

Haben Sie versucht, das Fusion Log Viewer Tool zu verwenden? Es sollte Ihnen einige Hinweise geben, auch wenn es manchmal zu ausführlich ist ... Hier erhältlich http://msdn.microsoft.com/en-us/library/e74a18c4

+0

Es sieht so aus, als wäre das für Entwicklungsumgebungen, das passiert nicht im Visual Studio. –

+0

Haben Sie diesen Verbindungsposten angeschaut? http://connect.microsoft.com/VisualStudio/feedback/details/541962/unable-to-load-one-or-more-of-the-requested-types-connected-with-entitydatasource –

+0

Das sieht wie ein sehr nützlich aus Link, danke für die Veröffentlichung. Ich hatte es bei meinen Recherchen verpasst. Ich werde weiter untersuchen, von besonderer Bedeutung ist, dass das Recycling des Arbeitsprozesses das Problem verursacht. –