суббота, 2 апреля 2011 г.

Ошибка SharePoint "An unhandled exception ('System.Security.Cryptography.CryptographicException') occurred in OWSTIMER.EXE [nnnn]"

На одном из серверов в ферме SharePoint я заметил следующую ошибку:


Выводилась примерно каждые 20 секунд.

Проблема в том, что на этом сервере установлен Vusial Studio. Для решения конечно можно удалить Visual Studio с сервера SharePoint.

Есть  более простые решения.
Решение 1. Отключение отладки через Visual Studio.
  • В меню Tools (Сервис) выберите пункт Options (Параметры).
  • В окне Options (Параметры) выберите папку Debugging (Отладка).
  •  В папке Debugging (Отладка) выберите страницу Just-In-Time.
  •  В поле Enable Just-In-Time debugging for these types of code (Включить JIT–отладку для следующих типов кода) отмените выбор соответствующих типов : Managed, Native или Script.
  • Чтобы отключить JIT–отладку, если она была включена, необходимы права администратора. 
  • Нажмите кнопку ОК.
Решение 2. Правка реестра Windows.
  • Меню Пуск выберите команду выполнить .
  • В поле Открыть введите regedit, нажмите кнопку ОК .
  • В окне Редактора реестра найдите и удалите следующие разделы реестра:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
  • Если компьютер работает под управлением 64-разрядной операционной системе, также удалите следующие разделы реестра:
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
  • Закройте окно Редактора реестра .

четверг, 24 марта 2011 г.

Перенос списка/библиотеки с одного веб-сайта SharePoint на другой веб-сайт

Экспортировать список/библиотеку SharePoint с веб-сайта можно 2 способами, через PowerShell и через Центр администрирования SharePoint. Я покажу как это делается через Центр администрирования. Импортировать список/библиотеку на веб-сайт SharePoint можно только через PowerShell.

Экспорт
1. Зайти в Центр администрирования SharePoint, далее Резервное копирование и восстановление > Экспорт сайта или списка.
2. Выбрать семейство веб-сайтов, сайт и список, которые необходимо экспортировать и выбрать файл, куда нужно экспортировать.
В итоге, у вас должно быть всё настроено аналогично рисунку ниже.

3. Нажать "Начать экспорт".

Импорт
1. Запустить PowerShell SharePoint 2010 на сервере SharePoint.
2. Импорт списка/библиотеки выполняется командой Import-SPWeb (подробнее о команде).
В PowerShell выполните команду:
> Import-SPWeb -Identify [URL-адрес_сайта] - Path [путь_к_файлу_экспорта] [-Force] [-NoFileCompression]
Например:
> Import-SPWeb -Identify http://portal/library - Path \\backup\share\export.cmp 

После этого можете проверять, перенесен ли список/библиотека.

среда, 23 марта 2011 г.

Настройка RBS с провайдером FILESTREAM для SharePoint 2010

  1. Включить FILESTREAM на SQL-сервере, где находятся базы данных SharePoint 2010. Для этого:
    • Запустите Диспетчер конфигураций SQL Server (Пуск > Все программы > Microsoft SQL Server 2008 R2 > Средства настройки);
    • Выделите службу SQL Server, в контекстном меню этой службы выберите Свойства;
    • Выберите вкладку FILESTREAM;
    • Установите флажок Разрешить FILESTREAM при доступе через Transact-SQL. Другие галочки не имеют значения для дальнейшей нашей настройки и зависят от ваших пожеланий. Нажмите Применить. Важно! Windows share name должно быть таким же, какое имя экземпляра SQL (Instance name). По умолчанию оно – MSSQLSERVER.
    • Запустите среду SQL Server Management Studio и создайте запрос:
      EXEC sp_configure filestream_access_level, 2
      RECONFIGURE

    Подробнее о включении FILESTREAM на SQL-сервере здесь.
  2. Подготовка хранилища BLOB-объектов.
    Для этого нужно выполнить поочерёдно 3 SQL-запроса над базой данных контента SharePoint-приложения, в которой вы хотите использовать FILESTREAM.
    В запросах замените [WSS_Content] на имя вашей базы данных контента web-приложения.
    Также, в запросе №3 замените путь «C:\Blobstore» на свой, где будут хранится данные BLOB-данные с SharePoint (Важно: эта папка не должна существовать, SQL Server сам её создаст).
    • Запрос №1:
      USE [WSS_Content]
      IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE name = N'##MS_DatabaseMasterKey##')CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'Admin Key Password !2#4'
    • Запрос №2:
      USE [WSS_Content]
      IF NOT EXISTS (SELECT groupname FROM sysfilegroups WHERE groupname=N'RBSFilestreamProvider')ALTER DATABASE [WSS_Content] ADD filegroup RBSFilestreamProvider CONTAINS FILESTREAM
    • Запрос №3:
      USE [WSS_Content]
      ALTER DATABASE [WSS_Content] ADD FILE (name = RBSFilestreamFile, FILENAME = 'c:\Blobstore') TO filegroup RBSFilestreamProvider

  3. Установка удалённого хранилища на Web-сервер.
    Для этого скачать RBS (Общая ссылка, RBS x86, RBS x64, RBS IA64).
    Скопировать его на веб-сервер SharePoint.
    На веб-сервере запустить командную строку от имени администратора и выполнить следующую команду:
    > msiexec /qn /lvx* rbs_install_log.txt /i RBS_X64.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content" DBINSTANCE="DBInstanceName" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1 где, RBS_X64.msi – это соответственно имя установочного файла,
    “WSS_Content” – имя вашей базы данных контента веб-приложения,
    “DBInstanceName” – имя SQL-сервера.
  4. Добавить RBS на все дополнительные веб-сервера и на SQL-сервер.
    Для этого выполнить следующую команду от имени администратора:
    > msiexec /qn /lvx* rbs_install_log.txt /i RBS_X64.msi DBNAME="WSS_Content" DBINSTANCE="DBInstanceName" ADDLOCAL="Client,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServer"
  5. Убедиться, что RBS установился нормально.
    В базе данных контента должны появиться таблицы, начинающиеся на «mssqlrbs».
  6. Запустить PowerShell for SharePoint 2010 и выполнить поочерёдно команды:
    > $cdb = Get-SPContentDatabase –WebApplication http://имя_сайта
    > $rbss = $cdb.RemoteBlobStorageSettings
    > $rbss.Installed()
    > $rbss.Enable()
    > $rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
    > $rbss
  7. Тестирование хранилища.
    Загрузите файл больше 100 кб в библиотеку документов на веб-сайт SharePoint. Размер папки файлов, которую мы указали в  шаге 2 (запрос №3) должен увеличится на размер закаченного в SharePoint файла.
    Дополнительная информация здесь.

    среда, 9 марта 2011 г.

    Выпущены пакеты обновления - VS 2010 SP 1 / TFS 2010 SP 1 / TFS Project Server Integration Feature Pack

    Для скачивания будут доступны с 10 марта 2011.


    Visual Studio 2010 Service Pack 1
    Ссылка: http://go.microsoft.com/fwlink/?LinkId=209902
    Описание: http://support.microsoft.com/kb/983509


    TFS 2010 Service Pack 1
    Ссылка: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=43d9f36a-6347-4ac4-86b6-cee4cd54b5d2
    Описание: http://support.microsoft.com/kb/2182621


    TFS Project Server Integration Feature Pack
    Документация: http://go.microsoft.com/fwlink/?LinkID=210709

    пятница, 4 марта 2011 г.

    TFS Power Tools March 2011

    Вышел TFS Power Tools March 2011, скачать его можно отсюда - http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f

    Основные новшества - более широкие возможности резервного копирования и восстановления баз TFS и расширенная работа с Windows Explorer. 

    среда, 2 марта 2011 г.

    Уменьшение времени отправки почтовых оповещений с TFS 2010

    Для уменьшения времени отправки mail-оповещений с сервера TFS нужно создать файл (например, "C:\Script.ps1") и записать в него следующий скрипт:
    [Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")

    # Modify the TFS configuration server URL as necessary.
    $configServer = new-object Microsoft.TeamFoundation.Client.TfsConfigurationServer "http://localhost:8080/tfs/"

    # Get the TF registry service.
    $tfsRegService = $configServer.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationRegistry])

    # Set the notification delay to 30 seconds. All collections will use this delay unless they override this value in the collection hive.
    $tfsRegService.SetValue("/Service/Integration/Settings/NotificationJobDelay", 30)

    В последней строчке число "30" можно изменить - это количество секунд ожидания для оповещения.

    После этого на сервере TFS запустить PowerShell и выполнить две команды:
    PS C:\> powershell Set-ExecutionPolicy RemoteSigned
    PS C:\> powershell c:\Script.ps1

    Далее, необходимо перезапустить IIS сервер. Это можно сделать через командную строку Windows или через PowerShell следующей командой: 
    >> iisreset /noforce


    вторник, 1 марта 2011 г.

    Включение логирования Visual Studio

    1. Перейти в папку
    64bit: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
    32bit: C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE

    2. Закрыть все экземпляры Visual Studio, если они открыты.
    Открыть файл "devenv.exe.config" для редактирования в блокноте.

    3. Вставить следующий текст внутри секции :
    <system.diagnostics>
          <switches>
            <add name="TeamFoundationSoapProxy" value="4" />
            <add name="VersionControl" value="4" />
          </switches>
          <trace autoflush="true" indentsize="3">
            <listeners>
              <add name="myListener"              type="Microsoft.TeamFoundation.TeamFoundationTextWriterTraceListener,Microsoft.TeamFoundation.Common, Version=10.0.0.0,
           Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" initializeData="c:\logs\vs.log" />
              <add name="perfListener" type="Microsoft.TeamFoundation.Client.PerfTraceListener,Microsoft.TeamFoundation.Client,
              Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            </listeners>
          </trace>
    </system.diagnostics>    


    Путь к лог-файлу можно изменить на свой (initializeData="c:\logs\vs.log").
    Сохранить и закрыть файл devenv.exe.config.

    4. Запустить Visual Studio 2010.

    четверг, 24 февраля 2011 г.

    Восстановление коллекции TFS из неотсоединённой базы коллекции

    Для того, чтобы без проблем перенести базу колекции TFS на другой сервер, нужно:
    1. отсоединить коллекцию (detach collection) в консоле администрирования TFS;
    2. Отсоединить файлы базы данных коллекции на SQL-сервере. 
    3. Перенести их на другой сервер и присоединить эту базу данных на SQL-сервере.
    4. Присоединить коллекцию в консоли администрирования TFS и запустить её.

    Иногда бывают сложности с 1-м шагом. Коллекцию не всегда можно отсоединить в консоли администрирования TFS, это случается по разным причинам. Но мы можем развернуть на другом сервере и базу неотсоединённой коллекции.

    Если мы не можем выполнить шаг 1, тогда нам необходимо выполнить следующую команду в командной строке вместо шага 4:
    TFSConfig Recover /ConfigurationDB:SQLServer\InstanceName;TFS_ConfigurationDBName /CollectionDB:SQLServer\instanceName;TFS_CollectionDBName


    Пример для следующих исходных данных
      SQL-сервер: QServ
      Instance: MSSQLSERVER (по умолчанию)
      Конфигурационная база TFS: TFS_Configuration
      База TFS-коллекции: TFS_Test

    Команда:
    TFSConfig Recover /ConfigurationDB:QServ\MSSQLSERVER;TFS_Configuration /CollectionDB:QServ\MSSQLSERVER;Tfs_Test

    Обязательно проверьте права доступа своей учётной записи. Например, учётная запись любого уважаемого администратора TFS :) должна удовлетворять следующим условиям:
    - находится в списке администраторов в консоли администрирования TFS;
    - находится в локальной группе Administrators на сервере;
    - иметь роль sysadmin на SQL-сервере.


    пятница, 18 февраля 2011 г.

    Настройка интеграции TFS 2010 and Project Server 2010 (Project Server Integration Feature Pack)

    У вас должно быть установлено:
    - TFS 2010;
    - Project Server 2010;
    - Visual Studio 2010 (для использования интеграции пользователями) + Team Explorer.

    Установка:
    1. На сервер с TFS установить SP1 для TFS 2010 (ссылка);
    2. На клиентские компьютеры установить SP1 для Visual Studio 2010 (ссылка);
    3. На Project Server установить Feature Pack for Visual Studio Team Foundation Server and Project Server Integration (ссылка, доступно только подписчикам MSDN).

    Настройка:
    4. На компьютере с установленным Team Explorer 2010 открыть командную строку и войти в каталог, содержащий утилиту TFSAdmin.
    Для x86: C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
    Для x64: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE

    5. Для регистрации PWA выполнить команду:
    >> TfsAdmin ProjectServer /RegisterPWA /pwa:ProjectServerUrl /TFS:tfsUrl
    Например:
    >> TfsAdmin ProjectServer /RegisterPWA /pwa:http://pserver/pwa /TFS:http://tfserver:8080/tfs/

    Если есть несколько сайтов PWA, тогда для каждого из них нужно повторить эту команду.

    На этом шаге могут возникнуть проблемы с разрешениями. Например, у меня была проблема с тем, что пользователь, под которым был установлен TFS, не имел доступ на портал Project Server. Подробнее о назначении разрешений здесь.

    6. Присоединить коллекцию TFS через команду:
    >> TfsAdmin ProjectServer /MapPWAtoCollection /pwa:ProjectServerUrl /collection:tfsCollectionUrl
    Например:
    >> TfsAdmin ProjectServer /MapPWAtoCollection /pwa:http://pserver/pwa /collection:http://tfserver:8080/tfs/DefaultCollection

    7. Далее, необходимо выполнить сопоставление полей TFS и Project Server. Для использования сопоставления полей по умолчанию, нужно выполнить команду:
    >> TFSAdmin ProjectServer /UploadFieldMappings /collection:tfsCollectionUrl /usedefaultfieldmappings
    Подробнее здесь.

    8. Настройка связи проекта на Project Server и TFS проекта.
    Команда:
    >> TfsAdmin ProjectServer /MapPlanToTeamProject /collection:tfsCollectionUrl /enterpriseproject:EnterpriseProjectName /teamproject:TeamProjectName /workitemtypes:ListOfWorkItemTypes /nofixedwork /projectfieldforworkitemtype:ProjectFieldName
    Например:
    >> TfsAdmin ProjectServer /MapPlanToTeamProject /collection:http://tfserver:8080/tfs/DefaultCollection /enterpriseproject:"Simple Project" /teamproject:"TFS Project" /workitemtypes:"User Story,Task" /nofixedwork

    9. Просмотр информации о настроенной интеграции TFS-Project
    а.) TFS-коллекции, участвующие в интеграции:
    >> TfsAdmin projectserver /getmappedCollection /TFS:http://tfserver:8080/tfs/
    б.) Веб-сайты PWA, участвующие в интеграции:
    >> TfsAdmin ProjectServer /GetRegisteredPWA /TFS:http://tfserver:8080/tfs
    в.) Все проекты Project Server, связанные с TFS-проектами:
    >> TfsAdmin projectserver /getmappedprojects /collection:http://tfserver:8080/tfs/DefaultCollection

    Некоторые ответы:
    1. Работает ли интеграция с Project Server 2007?
    - да, только нужно установить SP2 для Project Server 2007 (ссылка).
    2. Утверждения, которые отсылаются в Project Professional, может утверждать только владелец проекта.. Это необходимо помнить.

    Полезные ссылки:
    1. Интеграция TFS 2010 и Project Server 2010 (ссылка);
    2. Статья по интеграции TFS и Project Server 2010 (ссылка);
    3. Необходимое ПО (ссылка);
    4. Настройка интеграции TFS - Project Server (ссылка);
    5. Видео "Microsoft Project 2010 and TFS 2010, better together" (ссылка);
    6. Social.MSDN (ссылка).


    вторник, 8 февраля 2011 г.

    Ошибка SharePoint "База данных в диапазоне совместимости. Рекомендуется произвести обновление"

    Обычно, после установки некоторых Fix Pack для SharePoint Server появляется сообщение о необходимости провести обновление баз данных.
    Проверить это можно в центре администрирования SharePoint, выбрав пункт Обновление и перенос > Просмотр состояния базы данных.


    Для исправления, нужно на сервере в Power Shell выполнить команду:
    C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN>
    PSConfig -cmd upgrade -inplace v2v -passphrase ПарольнаяФразаНаSharePoint -wait


    После этого я ещё выполнил эту команду:
    > PSConfig.exe -cmd upgrade -inplace b2b -force -cmd applicationcontent -install -cmd installfeatures