Share via


Abrufen von Verweisen auf Websites, Webanwendungen und andere Schlüsselobjekte

Letzte Änderung: Donnerstag, 8. April 2010

Gilt für: SharePoint Foundation 2010

Ihr Code kann nur dann mit einer Bereitstellung von Microsoft SharePoint Foundation verwendet werden, wenn er zunächst einen Verweis auf die Objekte enthält, die er verwenden muss. Dazu zählen Websites, Websitesammlungen und Webanwendungen. Hierzu stehen zwei Methoden zur Verfügung: die eine Methode wird angewendet, wenn der Code in einer Konsolenanwendung oder Windows-basierten Anwendung verwendet wird, die andere wird angewendet, wenn der Code in einer vom Browser gehosteten Anwendung verwendet wird, wenn z. B. Website als Typ für Microsoft Visual Studio-Projekt ausgewählt wird.

HinweisHinweis

Der meiste Beispielcode im Microsoft SharePoint 2010 Software Development Kit (SDK) ist für eine vom Browser gehostete Anwendung geschrieben, wenn Sie also Code für eine Konsolenanwendung oder Windows-basierte Anwendung schreiben, müssen Sie den Code ändern. Anleitungen hierzu finden Sie unter "Konsolen- und Windows-Anwendungen: Verwenden von Objektkonstruktoren" weiter hinten in diesem Thema.

Vom Browser gehostete Anwendungen: Einrichten des Websitekontexts

Wenn eine Bereitstellung von SharePoint Foundation mittels einer vom Browser gehosteten Anwendung verwendet werden soll, muss der Code zunächst den Websitekontext oder Websitesammlungskontext für Anforderungen einrichten, die an den Server gesendet werden.

Sie müssen den HTTP-Kontext der Anforderung im Code anfordern. Microsoft empfiehlt, dass Sie hierzu die Microsoft.SharePoint.SPContext-Klasse und ihre Member verwenden. Es folgen einige Beispiele.

Zum Zurückgeben der aktuellen Websitesammlung können Sie die Current.SPContext.Site-Eigenschaft verwenden.

HinweisHinweis

Für alle Beispiele in diesem Artikel ist eine using-Direktive (Imports in Microsoft Visual Basic) für den Microsoft.SharePoint-Namespace erforderlich.

Dim oSiteCollection As SPSite = SPContext.Current.Site
SPSite oSiteCollection = SPContext.Current.Site;

Zum Zurückgeben der Website der aktuellen Anforderung können Sie SPContext.Current.Web verwenden.

Dim oWebSite As SPWeb = SPContext.Current.Web
SPWeb oWebSite = SPContext.Current.Web;

Wenn sich der Code in einer ASPX-Datei oder in der Code-Behind-Datei einer ASPX.CS-Datei befindet, können Sie alternativ die Methoden des SPControl-Objekts mit der Page.Context-Eigenschaft als Parameter verwenden. Verwenden Sie beispielsweise die GetContextWeb(HttpContext)-Methode zum Abrufen eines Verweises auf die aktuelle Website.

Dim oWebSite As SPWeb = SPControl.GetContextWeb(Context)
SPWeb oWebSite = SPControl.GetContextWeb(Context);

Wenn die ASPX-Seite von LayoutsPageBase statt von Page erbt, können Sie schließlich die Eigenschaften Site oder Web für die vorherige Klasse verwenden, um entsprechende Verweise auf die aktuelle Websitesammlung oder Website zu erhalten. (Oder Sie können die Microsoft.SharePoint.WebControls.LayoutsPageBase.Context-Eigenschaft als Parameter für die Methoden GetContextWeb(HttpContext) und GetContextSite(HttpContext) verwenden.) Mit LayoutsPageBase werden Ihnen zusätzliche SharePoint-orientierte Funktionen bereitgestellt, hauptsächlich in Verbindung mit dem Verwalten von Benutzerrechten für die Seite, die in Page nicht verfügbar sind.

Wird der folgende Code beispielweise in einer ASPX-Seite verwendet, die von LayoutsPageBase erbt (oder dem Code-Behind der Seite), wird ein Verweis auf die aktuelle Website abgerufen.

HinweisHinweis

In diesem Beispiel ist eine using-Direktive (Imports in Visual Basic) für den Microsoft.SharePoint.WebControls-Namespace erforderlich.

Dim oWebSite As SPWeb = this.Web
SPWeb oWebSite = this.Web;
VorsichtVorsicht

Sie sollten ein SPSite- oder SPWeb-Objekt, das von den oben genannten Methoden abgerufen wird, nicht verwerfen. Die SharePoint Foundation-Laufzeit verwirft diese, nachdem die Seite beendet wurde. Das Aufrufen der Dispose- oder Close-Methode dieser Objekte kann zu unvorhersehbarem Verhalten führen. Dies steht im starken Gegensatz zum Abrufen von Verweisen auf diese Objekttypen mithilfe eines Konstruktors, wie zu einem späteren Zeitpunkt in diesem Thema im Abschnitt mit dem Titel "Konsolen- und Windows-Anwendungen: Verwenden von Objektkonstruktoren" erläutert wird. Es gibt zahlreiche Nuancen bei den bewährten Methoden zum Verwerfen von SharePoint Foundation-Objekten. Lesen Sie sorgfältig den Abschnitt Verwerfen von Objekten.

Verwenden Sie SPContext.Current.Site.WebApplication.Farm zum Zurückwechseln zum aktuellen Serverfarmobjekt auf oberster Ebene.

Dim oFarm As SPFarm = SPContext.Current.Site.WebApplication.Farm
SPFarm myFarm = SPContext.Current.Site.WebApplication.Farm;

Verwenden Sie die RootWeb-Eigenschaft zum Zurückwechseln zur Website auf oberster Ebene der aktuellen Websitesammlung.

Dim oTopSite As SPWeb = SPContext.Current.Site.RootWeb
SPWeb oTopSite = SPContext.Current.Site.RootWeb;

Die SPContext-Klasse stellt keine Einschränkung zum Abrufen des aktuellen Objekts eines beliebigen angegebenen Typs dar. Sie können beispielsweise die SPSite.AllWebs-Eigenschaft verwenden, um einen Verweis auf eine andere Website als die aktuelle abzurufen. Der folgende Code gibt den Kontext einer angegebenen Website zurück, indem ein Indexer mit der AllWebs-Eigenschaft verwendet wird.

VorsichtVorsicht

Sie müssen Verweise auf Objekte, die über die AllWebs-Eigenschaft abgerufen werden, explizit verwerfen. Es gibt zahlreiche Nuancen bei den bewährten Methoden zum Verwerfen von SharePoint Foundation-Objekten. Lesen Sie sorgfältig den Abschnitt Verwerfen von Objekten.

Dim oWebSite As SPWeb = 
    SPContext.Current.Site.AllWebs("myOtherSite")
...
oWebSite.Dispose();
SPWeb oWebSite = SPContext.Current.Site.AllWebs["myOtherSite"];
...
oWebSite.Dispose();

// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPWeb oWebSite = SPContext.Current.Site.AllWebs["myOtherSite"])
{
...
}

Zum Abrufen eines Verweises auf die Serverfarm oder den aktuellen physikalischen Server können Sie schließlich die statischen Eigenschaften SPFarm.Local und SPServer.Local verwenden. Die folgende Zeile zeigt ein Beispiel.

Dim oFarm As SPFarm = SPFarm.Local
SPFarm oFarm = SPFarm.Local;

Wenn Sie eine der Local-Eigenschaften verwenden möchten, müssen Sie eine using-Direktive (Imports in Visual Basic) für den Microsoft.SharePoint.Administration-Namespace hinzufügen.

Sie können jedes der vorherigen Verfahren nicht nur in Webanwendungen und .aspx-Seiten verwenden sondern auch in benutzerdefinierten Webdiensten und Webparts.

Konsolen- und Windows-Anwendungen: Verwenden von Objektkonstruktoren

Die SPContext-Klasse hat in einer Konsolenanwendung oder Windows-basierten Anwendung keine Bedeutung. Wenn Sie Code für eine dieser Arten von Anwendungen schreiben und mit einer spezifischen Websitesammlung arbeiten möchten, verwenden Sie den SPSite-Konstruktor, um ein Objekt zu instanziieren, das die Websitesammlung darstellt, wie im folgenden Beispiel gezeigt.

HinweisHinweis

Der Code muss alle SPSite- oder SPWeb-Objekte verwerfen, die mithilfe eines Konstruktors abgerufen wurden. Es gibt zahlreiche Nuancen bei den bewährten Methoden zum Verwerfen von SharePoint Foundation-Objekten. Lesen Sie sorgfältig den Abschnitt Verwerfen von Objekten.

Dim oSiteCollection As New SPSite("https://localhost")
...
oSitecollection.Dispose();
SPSite oSiteCollection = new SPSite("https://localhost");
...
oSitecollection.Dispose();

// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPSite oSiteCollection = new SPSite("https://localhost"))
{
...
}
HinweisHinweis

localhost ist ein Windows-Alias für den Computer, auf dem der Code ausgeführt wird. Für Konsolenanwendungen empfiehlt Microsoft die Verwendung von localhost an Stelle des tatsächlichen Servernamens. Der Grund hierfür liegt darin, dass eine Konsolenanwendung sowieso nur auf dem lokalen Computer verwendet werden kann. Wenn Sie einen Servernamen wie MyServer hartcodieren, kann die Konsolenanwendung nicht auf einen anderen Computer übertragen werden, und die Konsolenanwendungen werden unterbrochen, wenn der Servername einmal geändert werden sollte.

Nachdem Sie einen Verweis auf eine Sammlung abgerufen haben, können Sie die AllWebs-Auflistung verwenden, um einen Verweis auf eine bestimmte Website in der Sammlung abzurufen.

Dim oWebSite As SPWeb
oWebSite = mySiteCollection.AllWebs("mySite")
...
oWebSite.Dispose();
SPWeb oWebSite = mySiteCollection.AllWebs["mySite"];
...
oWebSite.Dispose();

// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPWeb oWebSite = mySiteCollection.AllWebs["mySite"])
{
...
}

Alternativ können Sie die OpenWeb-Methode wie in der folgenden Zeile gezeigt verwenden.

Dim oWebSite As SPWeb
oWebSite = mySiteCollection.OpenWeb("mySite")
...
oWebSite.Dispose();
SPWeb oWebSite = mySiteCollection.OpenWeb("mySite");
...
oWebSite.Dispose();

// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPWeb oWebSite = mySiteCollection.OpenWeb("mySite"))
{
...
}

Falls der Code bereits einen Verweis auf ein SPSite oder SPWeb besitzt, können Sie dies zum Abrufen eines Verweises auf die übergeordneten Objekte verwenden. Dieses Verfahren wird in den folgenden Zeilen gezeigt, in dem mySiteCollection ein SPSite-Objekt und oWebSite ein SPWeb-Objekt ist.

Dim parentSiteCollection As SPSite = oWebSite.Site;
Dim content As SPContentDatabase = mySiteCollection.CurrentDatabase;
Dim webApplication As SPWebApplication = mySiteCollection.WebApplication;
Dim farm As SPFarm = mySiteCollection.WebApplication.Farm;
SPSite parentSiteCollection = oWebSite.Site;
SPContentDatabase content = mySiteCollection.CurrentDatabase;
SPWebApplication webApplication = mySiteCollection.WebApplication;
SPFarm farm = mySiteCollection.WebApplication.Farm;

Sie sollten jedoch das Konstruieren eines SPSite- oder SPWeb-Objekts nur zum Abrufen eines Verweises auf ein übergeordnetes Objekt vermeiden. Diese Objekte nehmen viel Arbeitsspeicher ein. Verwenden Sie zum Abrufen eines Verweises auf eine Webanwendung stattdessen die statische Lookup(Uri)-Methode und übergeben Sie ihr ein SystemUri-Objekt, das mit der URI der Webanwendung erstellt wird. Dann können Sie einen Verweis auf die Farm abrufen, indem Sie die Farm-Eigenschaft des Webanwendungsobjekts verwenden. (Ein Verweis auf eine Remotefarm kann mithilfe der statischen Open(String)-Methode abgerufen werden.) Die ContentDatabases-Eigenschaft des Webanwendungsobjekts enthält eine Auflistung der Inhaltsdatenbanken in der Webanwendung. Ein Verweis auf eine bestimmte Inhaltsdatenbank kann über diese Eigenschaft abgerufen werden, wenn Sie den entsprechenden Index in der Auflistung kennen. Weitere Informationen finden Sie im Referenzthema für die SPContentDatabaseCollection-Klasse. In den folgenden Zeilen werden einige dieser Punkte veranschaulicht.

SPWebApplication webApplication = Lookup(new Uri("https://localhost/");
SPFarm farm = webApplication.Farm;
SPContentDatabase content = webApplication.ContentDatabases[0];

Siehe auch

Referenz

Bestimmen des Speicherorts für eine benutzerdefinierte Anwendung

Konzepte

Verwerfen von Objekten

SharePoint-Entwicklungsaufgaben - Gewusst wie...

Weitere Ressourcen

Verwenden des Objektmodells für grundlegende Aufgaben