Рекомендации по разработке изолированных решений
Дата последнего изменения: 12 апреля 2011 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Предотвращение создания статических членов
Предотвращение вызова необработанных исключений
Использование как атрибута AllowPartiallyTrustedCallers, так и атрибута SharePointPermission
Доступно на сайте SharePoint Online
В данном разделе описываются некоторые рекомендации по разработке решений для песочницы.
Предотвращение создания статических членов
Когда отдельное решение для песочницы впервые обрабатывается на определенном сервере, на котором запущена служба изолированного кода SharePoint Foundation (иногда ее называют службой узла пользовательского кода), эта служба создает для него в изолированном рабочем процессе домен приложения, в который загружаются все статические переменные в коде решения. Этот домен приложения продолжает существовать после завершения работы решения для песочницы и используется повторно при повторном запросе того же решения для песочницы, возможно, другим пользователем в другом семействе веб-сайтов. Побочный эффект от такой организации системы заключается в том, что статические значения не загружаются повторно и необязательно являются приемлемыми для каждого выполнения решения для песочницы в каждом контексте. Например, предположим, что код решения помещает SPContext.Current в статическое поле с именем myContext. Если это решение запрашивается из другого семейства веб-сайтов, значение myContext.Site является неправильным.
Поэтому следует избегать создания статических полей и свойств в изолированном коде.
Предотвращение вызова необработанных исключений
Ваш код не должен вызывать исключения, которые им не обрабатываются. Причина этого заключается в том, что необработанное исключение в решении для песочницы завершает работу всех решений для песочницы в изолированном рабочем процессе, а не только то из них, которое вызвало исключение. По той же причине рекомендуется перехватывать все исключения и отображать соответствующее сообщение об ошибке в пользовательском интерфейсе изолированного решения, например свойство Message объекта Exception.
Использование как атрибута AllowPartiallyTrustedCallers, так и атрибута SharePointPermission
Код в изолированном рабочем процессе может вызывать только те сборки, у которых есть атрибут AllowPartiallyTrustedCallersAttribute. Это значит, что большинство развертываемых в решениях для песочницы пользовательских сборок должны иметь этот атрибут. Кроме того, ASP.NET требует наличия этого атрибута у каждой сборки, которая включает в себя класс, являющийся производным от WebPart. По этим причинам Microsoft Visual Studio по умолчанию помещает этот атрибут в файл AssemblyInfo, при каждом запуске проекта решения для песочницы. Однако сборки с таким атрибутом создают угрозу безопасности, если пакет такого решения будет установлен как решение фермы, поскольку это позволило бы любой вызывающей стороне с частичным доверием вызывать классы сборки в среде с полным доверием. Если любой из таких классов обращается к объектной модели SharePoint, то любая вызывающая сторона с частичным доверием могла бы получить доступ к объектной модели SharePoint. Чтобы предотвратить это, каждый класс в сборке, помеченный с помощью атрибута AllowPartiallyTrustedCallers, вызывающий объектную модель SharePoint, должен быть снабжен следующим атрибутом запроса разрешения:
[Microsoft.SharePoint.Security.SharePointPermission(System.Security.Permissions.SecurityAction.LinkDemand, ObjectModel=true)]
Этим обеспечивается то, что только вызывающие стороны с разрешением объектной модели SharePoint могут вызывать члены этого класса.
Атрибут AllowPartiallyTrustedCallers не является обязательным для всех сборок в решениях для песочницы. Например, приемник событий вызывается только полностью доверенным EventCodeHost, поэтому, если сборка состоит только из этого приемника событий, атрибут AllowPartiallyTrustedCallers можно удалить.
См. также
Концепции
Что можно реализовать в изолированном решении