Поделиться через


Получение ссылок на сайты, веб-приложения и другие ключевые объекты

Дата последнего изменения: 8 апреля 2010 г.

Применимо к: SharePoint Foundation 2010

Для работы с развертыванием Microsoft SharePoint Foundation код сначала должен получить ссылку на объекты, с которыми он будет работать, включая веб-сайты, семейства сайтов и веб-приложения. Для этого существует два метода: один применяется, если код будет использоваться в консольном приложении или приложении Windows; другой — если код будет использоваться в приложении, реализованном в браузере, например, когда в качестве типа проекта Microsoft Visual Studio выбран "Веб-сайт".

ПримечаниеПримечание

В большинстве примеров кода в SDK Microsoft SharePoint 2010 используется второй метод, поэтому при создании программы для консольного приложения или приложения Windows необходимо изменить такой код. Инструкции для этого см. в разделе "Консольные приложения и приложения Windows: использование конструкторов объектов" далее в этой теме.

Приложения, реализованные в браузере: установка контекста сайта

Для работы с развертыванием SharePoint Foundation с помощью приложения, реализованного в браузере, код должен сначала установить контекст сайта или семейства сайтов для запросов, выполняемых на сервер.

Необходимо получить HTTP-контекст запроса в коде. Майкрософт рекомендует делать это с помощью класса Microsoft.SharePoint.SPContext и его методов, как показано в некоторых примерах далее.

Чтобы вернуть текущее семейство сайтов, можно использовать свойство Current.SPContext.Site.

ПримечаниеПримечание

Во всех примерах в этой статьи требуется директива using (Imports в Microsoft Visual Basic) для пространства имен Microsoft.SharePoint.

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

Для возврата веб-сайта текущего запроса можно использовать SPContext.Current.Web.

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

Иначе, если код содержится в ASPX-файле или является кодом программной части в файле ASPX.CS, можно использовать методы объекта SPControl со свойством Page.Context в качестве параметра. Например, используйте метод GetContextWeb(HttpContext), чтобы получить ссылку на текущий веб-сайт.

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

Наконец, если страница ASPX наследует от LayoutsPageBase вместо Page, можно использовать свойство Site или Web последнего класса, чтобы получить ссылки, соответственно, на текущее семейство сайтов или веб-сайт. (Или можно использовать свойство Microsoft.SharePoint.WebControls.LayoutsPageBase.Context в качестве параметра методов GetContextWeb(HttpContext) и GetContextSite(HttpContext).) Класс LayoutsPageBase предоставляет некоторые дополнительные функциональные возможности для SharePoint, главным образом связанные с управлением правами пользователей для страницы, которые недоступны в Page.

Например, следующий код при использовании на странице ASPX, наследующей от LayoutsPageBase, (или фоновый код страницы) возвращает ссылку на текущий веб-сайт.

ПримечаниеПримечание

В этом примере необходима директива using (Imports в Visual Basic) для пространства имен Microsoft.SharePoint.WebControls.

Dim oWebSite As SPWeb = this.Web
SPWeb oWebSite = this.Web;
Предупреждающая заметкаВнимание!

Не следует уничтожать объект SPSite или SPWeb, полученный с помощью любого из указанных выше методов. Среда выполнения SharePoint Foundation уничтожит их после закрытия страницы. Вызов метода Dispose или Close этих объектов приведет к непредсказуемому поведению. Это отмечено в различии получения ссылок на эти типы объектов с помощью конструктора, как описано ниже в разделе "Консольные приложения и приложения Windows: использование конструкторов объектов". Практические рекомендации содержат нюансы относительно того, когда следует уничтожать объекты SharePoint Foundation. Внимательно изучите раздел Удаление объектов.

Чтобы вернуть текущий объект фермы серверов верхнего уровня, используйте SPContext.Current.Site.WebApplication.Farm.

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

Чтобы вернуть веб-сайт верхнего уровня текущего семейства сайтов, используйте свойство RootWeb.

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

Класс SPContext не ограничивает пользователя получением текущего объекта любого данного типа. Например, можно использовать свойство SPSite.AllWebs для получения ссылки на другой веб-сайт, отличный от текущего. Следующий код возвращает контекст указанного сайта с помощью индексатора со свойством AllWebs.

Предупреждающая заметкаВнимание!

Следует явно удалять ссылки на объекты, полученные через свойство AllWebs. Практические рекомендации содержат нюансы относительно того, когда следует уничтожать объекты SharePoint Foundation. Внимательно изучите раздел Удаление объектов.

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"])
{
...
}

Наконец, чтобы вернуть ссылку на ферму серверов или текущий физический сервер, можно использовать статические свойства SPFarm.Local и SPServer.Local. Примером является следующая строка.

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

Чтобы использовать любое из свойств Local, необходимо добавить директиву using (Imports в Visual Basic) для пространства имен Microsoft.SharePoint.Administration.

Любой из предыдущих приемов можно использовать не только в веб-приложениях и на страницах .aspx, но также в пользовательских веб-службах и веб-частях.

Консольные приложения и приложения Windows: использование конструкторов объектов

Класс SPContext неприменим в консольных приложениях и приложениях на базе Windows. Если пишется код для такого типа приложений и требуется работать с отдельным семейством сайтов, используйте конструктор SPSite, чтобы создать экземпляр объекта, представляющего семейство сайтов, как показано в следующем примере.

ПримечаниеПримечание

Код должен ликвидировать любой объект SPSite или SPWeb, полученный с помощью конструктора. Практические рекомендации содержат нюансы относительно того, когда следует уничтожать объекты SharePoint Foundation. Внимательно изучите раздел Удаление объектов.

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"))
{
...
}
ПримечаниеПримечание

"localhost" — это псевдоним Windows для компьютера, на котором выполняется код. Для консольных приложений Microsoft рекомендует всегда использовать псевдоним "localhost" вместо фактического имени сервера. Это связано с тем, что консольное приложение, в любом случае, может работать только на локальном компьютере. Если имя сервера жестко задано, например "MyServer", тогда консольные приложения не могут быть перенесены на другой компьютер и перестанут работать в случае изменения имени сервера.

После получения ссылки на семейство сайтов можно использовать семейство AllWebs, чтобы получить ссылку на отдельный веб-сайт в семействе.

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"])
{
...
}

Дополнительно, можно использовать метод OpenWeb, как показано в следующей строке.

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"))
{
...
}

Если код ссылается на сайт SPSite или SPWeb, его можно использовать для получения ссылок на родительские объекты. В приведенном ниже примере использования данной техники mySiteCollection это объект SPSite, а oWebSite — объект SPWeb.

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;

Избегайте создания объектов SPSite и SPWeb только для получения ссылки на родительский объект. Эти объекты занимают большой объем памяти. Вместо этого, для получения ссылки на веб-приложение используйте статический метод Lookup(Uri) и передайте ему объект SystemUri, созданный с URI веб-приложения. После этого можно получить ссылку на ферму с помощью свойства Farm объекта веб-приложения. (Получить ссылку на удаленную ферму можно с помощью статического метода Open(String).) Свойство ContentDatabases объекта веб-приложения содержит коллекцию баз данных содержимого в веб-приложении. С помощью этого свойства можно получить ссылку на конкретную базу данных содержимого, если известен ее индекс в коллекции. Дополнительные сведения см. в справочном материале по классу SPContentDatabaseCollection. В следующих строках иллюстрируются некоторые эти возможности.

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

См. также

Ссылка

Определение места создания пользовательского приложения

Концепции

Удаление объектов

Задачи разработки в SharePoint. Практическое руководство.

Другие ресурсы

Базовые задачи объектной модели