SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




SPProxyOperation: Could not load type

Unbeantwortet Dieser Beitrag hat 7 Antworten

Ohne Rang
5 Beiträge
Christian Fluhrer erstellt 15 Dez. 2011 15:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,
in einem aktuellen Projekt habe ich eine selbst geschrieben Service Application, diese läßt sich auch über ein  WebPart innerhalb einer Farm-Solution problemlos ansprechen.
Versuche nun diese ServiceApplication über ein WebPart innerhalb einer SandBox-Solution anzusprechen.
Hierfür hab ich eine Klasse vom Typ SPProxyOperation erstellt, die ich über das WebPart anspreche.
Um nicht für jede einzelne Funktion der ServiceApplication (die könnte ziemlich umfangreich werden) eine einzelne SPProxyOperation-Klasse zu schreiben, ist das Ziel, in der Execute-Methode die ServiceApplicationClient-Klasse zu instanzieren und als Interface zurückzuliefern.

Der Konstruktor der ServiceApplicationClient-Klasse wird erfolgreich durchlaufen und die Instanz wird an das SandBoxWebPart zurückgegeben. Wird nun eine Methode des Interface aufgerufen, die auf die ServiceApplication zugreifen, wird die Fehlermeldung geworfen:
Could not load type 'Microsoft.SharePoint.Administration.SPIisWebServiceApplicationProxy' from assembly 'Microsoft.SharePoint, Version=14.900.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'.

Wobei die Klasse hierbei nicht relevant ist, dies geschieht mit jeder Klasse (zumindest mit jeder SharePoint-Klasse).

Allerdings wird diese Fehlermeldung nur geworfen, wenn die KLasse in einer Methode der Klasse instanziert wird, wird sie in im Konstruktor instanziert, erscheint der Fehler nicht.
Kopiere ich den kompletten Code der ServiceApplicationClient-Klasse in die SPProxyOperation-Klasse, wird alles erfolgreich ausgeführt.
Das Problem tritt also nur auf, wenn SharePoint-Klassen in einer Untermethode aufgerufen werden (da die Klassen nicht serializierbar sind, reicht es leider nicht, sie einfach im Konstrutkor aufzurufen oder zu übergeben).

Bin über jeden Tip dankbar!

cu
 Christian

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Dez. 2011 16:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Christian Fluhrer"]da die Klassen nicht serializierbar sind[/quote]

Das wird wohl das Problem sein. Die Klasseninstanzen müssen intern von einem Prozeß zum anderen weitergegeben werden (zum SPUserCodeHost) und werden dazu serialisiert.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
5 Beiträge
Christian Fluhrer Als Antwort am 16 Dez. 2011 09:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im Prinzip hab ich sowas schon befürchtet, allerdings kommt er ja nicht mal zur instanzierung, er fliegt in dem Moment raus, in dem er in die Funktion springen will, in der die Klasse instanziiert wird. Ausserdem wird damit noch nicht erklärt, weshalb es funktioniert, wenn ich die Klasse im Konstruktor oder in der SPProxyOperation-Klasse selbst instanziiere.

Wie gesagt, der Fehler tritt nur auf, wenn ich die Klasse in einer Methode einer anderen Klasse instanziere.

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 16 Dez. 2011 14:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hast du

[assemblyAllowPartiallyTrustedCallers()]

gesetzt?

Ohne Rang
5 Beiträge
Christian Fluhrer Als Antwort am 16 Dez. 2011 14:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Jap, das ist auch gesetzt.

Hab auch noch:

[Microsoft.SharePoint.Security.

 

SharePointPermission(System.Security.Permissions.SecurityAction.LinkDemand, bjectModel = true)]

gesetzt, keine Ahnung, ob das damit etwas zu tun hat.

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 16 Dez. 2011 14:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hast du das in die Assembly eingetragen die deine ProxyAssembly dann in der besagten Methode nutzt / Instanziert?

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 16 Dez. 2011 15:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Schau mal hier http://msdn.microsoft.com/en-us/library/ff798433.aspx

Ist deine Assembly die du in der Methode benutzt auch Full Trust? (GAC)

Ohne Rang
5 Beiträge
Christian Fluhrer Als Antwort am 16 Dez. 2011 15:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja, das ist alles in einer Assembly, die ist im GAC und in dieser ist auch das Flag gesetzt.