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.




Development auf anderem Server

Unbeantwortet Dieser Beitrag hat 15 Antworten

Ohne Rang
271 Beiträge
Kiera erstellt 27 Jan. 2012 08:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo liebe Community,

ich bin noch am Anfang meiner "Sharepoint-Development-Karriere" und scheitere leider schon an den Grundlagen...

Situation:

1 x Entwicklungsserver (Win 2008 Srv, Sharepoint 2010)
1 x produktiver Server (Win 2008 Srv, Sharepoint 2010)
Beide Server sind in einer Domäne.

Auf dem Entwicklungsserver bin ich gerade dabei, mit Visual Studio 2010 eine Konsolenanwendung zu schreiben, die Listen aus Sharepoint ausliest und Elemente in eine andere Liste koopiert.
Das klappt auf dem Entwicklungsserver auch ganz gut.

Nun stehe ich aber vor der Frage, wie ich meine Konsolenanwendung auf den produktiven Server bekomme (und eben DORT die Listen auslesen kann). Wenn ich einfach nur in dieser Zeile die URL ändere

using (SPsite siteCollection = new SPSite("<produktiver Server\Websitesammlung>"))

kommt die Meldung "Die Webanwendung auf "<produktiver Server\Websitesammlung>" wurde nicht gefunden. Überprüfen Sie, ob Sie die URL richtig eingegeben haben. Falls die URL vorhandenen Inhalt anbietet, muss der Systemadministrator der entsprechenden Anwendung möglicherweise eine neue Anforderungs-URL-Zuordnung hinzufügen."

Wie bekomme ich es also hin, dass mein Entwicklungsserver auf den produktiven Server via Visual Studio zugreifen kann?

Grüßle Kiera

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Jan. 2012 08:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Kiera"]ich bin noch am Anfang meiner "Sharepoint-Development-Karriere" [/quote]

Aber Du arbeitest doch schon ziemlich lange mit SharePoint?

[quote user="Kiera"]Nun stehe ich aber vor der Frage, wie ich meine Konsolenanwendung auf den produktiven Server bekomme [/quote]

Eine Konsolenanwendung ist doch nur eine .exe-Datei, die man einfach auf ein anderes System kopieren und dort starten kann.

Wenn Du die URL nicht fest verdrahtest, sondern z.B. einfach als Parameter beim Aufruf übergibst, dann wird das auch flexibel. Die Parameter bekommst Du in der Main-Methode als args übergeben. Der Aufruf kann dann so aussehen:
MyConsoleApp.exe http://DeineURL

[quote user="Kiera"]Wie bekomme ich es also hin, dass mein Entwicklungsserver auf den produktiven Server via Visual Studio zugreifen kann?[/quote]

Das geht allerdings gar nicht. Du kannst immer nur das lokale System zum Entwickeln verwenden. Genau das ist der Grund für ein eigenes Entwicklungssystem. Außerdem würdest Du beim Debuggen das gesamte Produktivsystem lahmlegen.

Du kannst Dir aber vom Produktivsystem Backups (z.B. einer SiteCollection) auf das Entwicklungssystem holen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
271 Beiträge
Kiera Als Antwort am 27 Jan. 2012 09:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hey Andi,

vielen Dank für deine (wieder mal) sehr schnelle Antwort!!

Habe das mit dem Parameter eingebaut - auf die Idee hätte ich ja auch selbst kommen können ;o)
Auf dem Entwicklungsserver tut auch alles noch so, wie es soll. Auf dem produktiven Server kann ich es erst nachher mal testen...

Habe es aber mal auf meinem Win7-PC getestet: meine Konsolenanwendung hat sich leider aufgehängt ("konsolenanwendung.exe" funktioniert nicht mehr...)

Theoretisch müsste das Tool doch auf jedem PC / Server ausgeführt werden können, oder?

Und ja, ich arbeite schon lange mit Sharepoint, aber an die Programmierung traue ich mich erst jetzt richtig ran.

Grüßle Kiera

 

 

Ohne Rang
634 Beiträge
Olaf Didszun Als Antwort am 27 Jan. 2012 09:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Deine Konsolenanwendung greift auf das SharePoint Objektmodell zu und benötigt dafür die entsprechenden DLLs. Die dürften auf Deinem Windows 7 nicht vorhanden sein, es sei denn, Du hast da SharePoint installiert.

Grüße

Olaf

 

Ohne Rang
271 Beiträge
Kiera Als Antwort am 27 Jan. 2012 09:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Olaf,

danke für den Tipp - aber auf meinem anderen Sharepoint-Server läuft das Programm auch nicht...
Irgendwas habe ich vermutlich übersehen.....

Grüßle Kiera

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Jan. 2012 12:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ein Programm, das die SharePoint-(Server)API nutzt, läuft nur auf einem SharePoint-Server und kann dort nur die jeweils lokalen URLs verwenden. Wenn Du ein Programm möchtest, das auf jedem beliebigen Rechner läuft, mußt Du das Client Object Model verwenden.

Bist Du denn sicher, daß Du Deinem Programm die richtige URL einer Site, die zum lokalen SharePoint gehört, gegeben hast? Auf dem Entwicklungsrechner kannst Du das ja debuggen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
271 Beiträge
Kiera Als Antwort am 27 Jan. 2012 12:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok, das habe ich verstanden...

Aber müsste mein aktuelles Programm, das ja auf dem Entwicklungsserver (mit Parameter "Entwicklungsserver-URL") funktioniert, nicht auf einem anderen Sharepoint-Server (mit Parameter "anderer-Server-URL") auch tun?

Ich glaub ich muss mir wirklich mal das "Client Object Model" anschauen....

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Jan. 2012 13:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Kiera"]Aber müsste mein aktuelles Programm, das ja auf dem Entwicklungsserver (mit Parameter "Entwicklungsserver-URL") funktioniert, nicht auf einem anderen Sharepoint-Server (mit Parameter "anderer-Server-URL") auch tun?[/quote]

Doch, das müßte es. Kannst Du es auf dem Entwicklungsserver auch ohne VS-Unterstützung starten, also z.B. aus einer DOS-Box? Außerdem muß es natürlich immer unter einem Account mit genügend Rechten ausgeführt werden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
271 Beiträge
Kiera Als Antwort am 27 Jan. 2012 13:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja, das geht alles auf dem Entwicklungsserver.
Ich habe dort in einer DOS-Box das Programm mit Parameter ohne Probleme ausführen können, aber eben nur mt Zugriff auf den Entwicklungsserver.
Auf dem anderen Sharepoint-Server gings leider nicht.

So, aber nach deinem Tipp mit "Client Object Model" bin ich jetzt ein Stückchen weiter: ich habe eine kleine Konsolenanwendung geschrieben, die den Titel einer Sharepoint-Site ausliest (http://msdn.microsoft.com/en-us/library/ee857094(office.14).aspx) - und siehe da: mit Parameteraufruf funktioniert dieses Progrämmchen auf beiden Sharepoints! Jetzt muss ich "nur" noch meine andere Anwendung n bissel umschreiben, damit auch diese funktioniert. 

Aber ich verstehe das schon richtig, dass man, wenn man die Anwendung zum Beispiel auf einem Win 7 PC ausführen möchte, die Microsoft.SharePoint.Client und Client.Runtime installieren muss?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Jan. 2012 14:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Kiera"]Auf dem anderen Sharepoint-Server gings leider nicht[/quote]

Ich tippe mal auf ein Berechtigungsproblem, das gibt nämlich dieselbe Fehlermeldung.

[quote user="Kiera"]Aber ich verstehe das schon richtig, dass man, wenn man die Anwendung zum Beispiel auf einem Win 7 PC ausführen möchte, die Microsoft.SharePoint.Client und Client.Runtime installieren muss?[/quote]

So ist es, wobei "installieren" etwas zu viel gesagt ist. Es reicht, wenn sich die beiden Assemblies im selben Ordner wie die exe befinden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
271 Beiträge
Kiera Als Antwort am 27 Jan. 2012 14:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hm der Benutzer hat eigentlich überall die gleichen Berechtigungen... Egal, mit dem Client Object Model gehts ja jetzt vermutlich.

Vielen vielen Dank für die Nachhilfe in Sachen "Programmier-Grundlagen" :o)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Jan. 2012 15:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Kiera"]der Benutzer hat eigentlich überall die gleichen Berechtigungen[/quote]

So ganz gebe ich ja noch nicht auf - hast Du mal versucht, das Programm per rechte Maustaste - Als Administrator ausführen zu starten (bzw. die DOS-Box)?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
271 Beiträge
Kiera Als Antwort am 30 Jan. 2012 14:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

@Andi: ja auch das hatte ich getestet, auch unter verschiedenen Admin-Usern... Aber der Zugriff hat trotzdem nicht funktioniert...

Mit dem Client-Object-Model bin ich nun aber sehr weit gekommen, bzw. hab ich eigentlich alles, was ich wollte.

Nur noch eine kleine Frage:
Ich lösche zuerst alle Elemente einer Liste:

ClientContext clientContext_gesamt = new ClientContext(paraUrl);
Web oWebsite_gesamt = clientContext_gesamt.Web;
ListCollection collList_gesamt = oWebsite_gesamt.Lists;
List List_gesamt = collList_gesamt.GetByTitle("Gesamt");

CamlQuery Query_gesamt = new CamlQuery();

 

 

 

ListItemCollection allItems_gesamt = List_gesamt.GetItems(Query_gesamt);
clientContext_gesamt.Load(allItems_gesamt);
clientContext_gesamt.ExecuteQuery();
if
(allItems_gesamt.Count > 0)
{
   foreach (ListItem i_ges in
allItems_gesamt.ToList())
   {
     
i_ges.DeleteObject();
   }
   clientContext_gesamt.ExecuteQuery();
   Console.WriteLine("Gesamtliste geleert."
);
}
else
{
  
Console.WriteLine("Keine Einträge in der Gesamtliste vorhanden."
);
}
 

Das geht auch, solange nur wenige Einträge in dieser Liste sind. Aktuell sind es 478 List-Elemente, und da bricht meine Anwendung ab mit der Fehlermeldung "Die Anforderung verwendet zu viele Ressourcen".
Woran liegt das? Gibt es da eine Obergrenze?

Grüßle Kiera

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 30 Jan. 2012 15:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es gibt eine Grenze, aber ich weiß gerade nicht wo die liegt (und ob man sie erhöhen kann).

Lade doch einfach immer nur 100 Elemente und das solange, bis es keine mehr gibt. Du kannst das einschränken, indem Du dem CAML ein RowLimit hinzufügst.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
271 Beiträge
Kiera Als Antwort am 30 Jan. 2012 17:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank für deinen Tipp!

Habs jetzt tatsächlich mit 2 CamlQuerys hinbekommen:

- die 1. Query liest alle Elemente aus (damit ich die Anzahl der Elemente habe, um die Anzahl der Durchgänge zu berechnen)
- die 2. Query wird von einer For-Schleife umfasst und löscht in mehreren Durchgängen in 100er Schritten die Elemente (mit der RowLimit-Angabe)

Ich glaub jetzt hab ich alles, was ich wollte!

Danke nochmal!

Grüßle Kiera

Ohne Rang
271 Beiträge
Kiera Als Antwort am 27 Jan. 2012 09:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

OK - Nachtrag:

der Test der Anwendung auf dem produktivem Server ist ebenfalls fehlgeschlagen, Programm stürzt ab mit der Meldung:

"FileNotFoundException: Die Webanwendung ... kann nicht gefunden werden"
Geht weder mit der Webanwendung auf dem Entwicklungsserver, noch mit der produktiven Umgebung...