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


Необходимые условия для примеров кода на основе WCF в Project

Сведения о создании проектов в Visual Studio с помощью примеров кода на основе WCF, включенных в справочные разделы интерфейса Project Server (PSI).

Многие примеры кода на основе WCF, включенные в библиотеку классов Project Server 2013 и справочник по веб-службе , изначально были созданы для документации разработчика Project 2010 и использовали стандартный формат для веб-служб WCF. Примеры по-прежнему работают в Project Server 2013 и предназначены для копирования в консольное приложение и запуска в виде полного модуля. Исключения из этого правила отмечаются в примере.

Примеры кода в документации разработчика project 2013, которые не отличаются от примеров, разработанных для Office Project Server 2007, используют веб-службы ASMX. Примеры на основе ASMX можно также адаптировать для использования служб WCF. В данной статье показывается, как использовать эти примеры со службами WCF. Сведения об использовании примеров с веб-службами ASMX см. в разделе Предварительные требования для примеров кода на основе ASMX в Project.

Примечание.

Если клиентская объектная модель (CSOM) включает методы, необходимые для вашего приложения, то новые приложения следует разрабатывать с использованием этой CSOM. CSOM позволяет приложениям работать с Project Online или локальной установкой Project Server 2013. В противном случае, если ваше приложение использует интерфейс PSI, то оно должно использовать интерфейс WCF, что является рекомендуемой технологией для сетевого взаимодействия. Приложения, использующие интерфейс ASMX или интерфейс WCF, могут работать только для локальных установок Project Server 2013.

Дополнительные сведения о CSOM см. в статье Архитектура Project Server 2013 и клиентская объектная модель (CSOM) для Project 2013.

Перед запуском примеров кода необходимо настроить среду разработки, настроить приложение, добавить файл конфигурации службы (или настроить службы WCF программными средствами), а также изменить значения универсальных констант, чтобы они соответствовали вашей среде.

Настройка среды разработки

  1. Настройте тестовую систему Project Server.

    При разработке или тестировании рекомендуется всегда использовать тестовую систему Project Server. Даже если ваш код работает отлично, взаимозависимости между проектами, отчеты или другие факторы среды могут привести к непредвиденным последствиям.

    Примечание.

    Убедитесь, что вы являетесь допустимым пользователем на сервере, и проверьте наличие достаточных разрешений для выполнения вызовов PSI, используемых вашим приложением. В разделе документации для разработчиков по каждому методу PSI имеется таблица разрешений Project Server. Например, для метода Project.QueueCreateProject требуется глобальное разрешение NewProject и разрешение SaveProjectTemplate .

    В некоторых ситуациях может требоваться выполнение удаленной отладки на сервере. Кроме того, может потребоваться настроить обработчик событий, установив сборку обработчика событий на каждом компьютере Project Server в ферме SharePoint, а затем настроив обработчик событий для экземпляра Project Web App с помощью страницы Параметры Project Server в разделе Общие параметры приложения центра администрирования SharePoint.

  2. Настройте компьютер разработки.

    Обычно доступ к интерфейсу PSI осуществляется по сети. Примеры кода разработаны для запуска на клиенте, находящемся отдельно от сервера, если не указано иное.

    1. Установите правильную версию Visual Studio. Если не указано иное, то примеры кода написаны на Visual C#. Их можно использовать с Visual Studio 2010 или Visual Studio 2012. Убедитесь, что установлен самый последний пакет обновления.

    2. Скопируйте библиотеки DDL Project Server на компьютер разработки. Скопируйте следующие сборки из [Program Files]\Microsoft Office Servers\15.0\Bin на компьютере Project Server на компьютер разработки:

      • Microsoft.Office.Project.Server.Events.Receivers.dll;

      • Microsoft.Office.Project.Server.Library.dll;

    3. Сведения о порядке компиляции и использования сборки прокси ProjectServerServices.dll для служб WCF в PSI см. в разделе Использование сборки прокси PSI и описаний IntelliSense.

  3. Установите файлы IntelliSense.

    Чтобы использовать описания IntelliSense для классов и членов в сборках Project Server, скопируйте обновленные XML-файлы IntelliSense из пакета SDK для Project 2013 в тот же каталог, где находятся сборки Project Server. Например, скопируйте файл Microsoft.Office.Project.Server.Library.xml в каталог, где ваше приложение будет устанавливать ссылку на сборку Microsoft.Office.Project.Server.Library.dll.

    Для описаний IntelliSense для служб PSI требуется создать сборку прокси-сервера PSI с помощью скрипта CompileWCFProxyAssembly.cmd в Documentation\IntelliSense\WCF подкаталоге в пакете SDK для Project 2013. Этот скрипт создает сборку прокси ProjectServerServices.dll на основе WCF. Дополнительные сведения см. в файле [ReadMe_IntelliSense].mht в загрузке пакета SDK.

Создание приложения и добавление ссылки на службу

  1. Создайте консольное приложение.

    При создании консольного приложения в раскрывающемся списке диалогового окна New Project (Создание проекта) выберите .NET Framework 4. В новое приложение можно скопировать пример кода PSI.

  2. Добавьте ссылки, необходимые для WCF.

    В Обозреватель решений добавьте ссылку на System.ServiceModel (см. рис. 1). Веб-приложение будет использовать System.ServiceModel.Web.

    Также добавьте ссылку на System.Runtime.Serialization.

    Рис. 1. Добавление ссылок в Visual Studio для приложения на основе WCF

    Добавление ссылок для WCF

  3. Скопируйте код.

    Скопируйте весь пример кода в файл Program.cs консольного приложения.

  4. Установите пространство имен для примера приложения.

    Можно либо изменить пространство имен, указанное вверху примера, на пространство имен по умолчанию для приложения, либо изменить пространство имен по умолчанию для приложения, чтобы оно соответствовало примеру. Чтобы изменить пространство имен по умолчанию для приложения, следует изменить свойства приложения.

    Например, пример кода для ReadResource содержит пространство имен Microsoft.SDK.Project.Samples.CreateResourceTest. Если проект Visual Studio имеет имя ResourceTest, скопируйте пространство имен из файла Program.cs, а затем откройте панель Свойства (выберите в меню Проект пункт Свойства ResourceTest). На вкладке Приложение вставьте скопированное пространство имен в текстовое поле Пространство имен по умолчанию.

  5. Установите ссылки на службы.

    Во многих примерах требуются ссылки на одну или несколько служб PSI. Они перечисляются в самом примере или в комментариях перед примером. Чтобы получить правильное пространство имен ссылок на службы, убедитесь, что предварительно было установлено пространство имен по умолчанию для приложения.

    Существует три способа добавления ссылки на службу WCF.

Использование сборки прокси PSI и описаний IntelliSense.

Сборку прокси можно использовать для всех общедоступных служб WCF в PSI. Скомпилируйте сборку прокси-сервера ProjectServerServices.dll с помощью скрипта Documentation\IntelliSense\WCF\CompileWCFProxyAssembly.cmd из пакета SDK для Project 2013, а затем скопируйте сборку прокси-сервера на компьютер разработки. Скопируйте файл ProjectServerServices.xml для IntelliSense в то же расположение. В Visual Studio установите ссылку на сборку прокси ProjectServerServices.dll.

Для пакетов обновления и обновлений Project Server можно обновить исходные файлы прокси и создать новую сборку прокси с помощью скрипта GenWCFProxyAssembly.cmd в той же самой папке загрузки пакета SDK. Ссылку на скачивание пакета SDK см. в документации разработчика project 2013. Дополнительные сведения см. в разделе Добавление ссылки на службу.

Примечание.

При извлечении исходных файлов прокси-сервера из файла Source.zip файлы в папке являются актуальными на Documentation\IntelliSense\WCF\Source дату публикации пакета SDK для Project 2013. Чтобы создать обновленные исходные файлы прокси PSI, запустите скрипт GenASMXProxyAssembly.cmd на компьютере Project Server. Дополнительные сведения см. в разделе Добавление ссылки на службу.

Скрипты в папке Documentation\IntelliSense\ASMX не работают для приложений на основе WCF. Скрипт GenASMXProxyAssembly.cmd вызывает файл Wsdl.exe, который создает файлы исходного кода для служб ASMX. Файлы прокси ASMX включают разные классы и свойства. Например, веб-служба Resource на основе ASMX включает класс Resource, в то время как служба Resource на основе WCF включает интерфейс Resource, интерфейс ResourceChannel и класс ResourceClient.

Произвольные пространства имен, созданные как для веб-службы ASMX, так и для службы WCF, одинаковые, поэтому файл ProjectServerServices.xml для IntelliSense работает с любой сборкой. Например, пространство имен службы Resource в сборке прокси на основе WCF и в сборке прокси на основе ASMX — SvcResource. Конечно, имена пространств имен можно изменить, но необходимо убедиться, что имена в сборке прокси и в файле IntelliSense ProjectServerServices.xml совпадают.

Если в примере кода для пространства имен службы PSI используется другое имя, например ProjectWebSvc, то для обеспечения работы IntelliSense необходимо изменить его на SvcProject, чтобы это пространство имен соответствовало сборке прокси.

Можно указать следующие преимущества использования сборки прокси на основе WCF.

  • Можно разрабатывать большинство решений со сборкой прокси на компьютере, отличном от компьютера Project Server. Для настройки отдельной ссылки на службу требуется разработка на компьютере Project Server.

  • Сборка прокси включает все пространства имен служб PSI, поэтому не придется добавлять несколько файлов прокси.

  • Если файл ProjectServerServices.xml добавляется в тот же каталог, в котором установлена ссылка на сборку прокси ProjectServerServices.dll, то можно получить описания IntelliSense для классов и членов PSI. Дополнительные сведения см. в файле [ReadMe_IntelliSense] в папке Documentation\IntelliSense скачивания пакета SDK для Project 2013.

Рис. 2. Использование IntelliSense для метода в службе ресурсов

Использование Intellisense для метода ReadResource

Недостаток использования сборки прокси состоит в том, что решение имеет больший размер, и необходимо распространять и устанавливать сборку прокси с решением. Кроме того, необходимо либо использовать одни и те же пространства имен в сборке прокси и в файлах IntelliSense, либо изменить скрипт для построения сборки прокси и изменения файла IntelliSense ProjectServerServices.xml, чтобы он использовал другие пространства имен.

Добавление файла прокси PSI

Пакет SDK для Project 2013 включает исходные файлы, созданные командой SvcUtil.exe для сборки прокси-сервера. Исходные файлы находятся в файле Source.zip в подкаталоге Documentation\IntelliSense\WCF . Вместо установки ссылки на сборку прокси можно добавить один или несколько исходных файлов в решение Visual Studio. Например, для использования службы Project и службы Resource добавьте в решение файлы wcf.Project.cs и wcf.Resource.cs.

В WCF основной класс в каждой службе PSI определяется интерфейсом и реализуется в классе клиента для доступа к членам. Например, интерфейс SvcProject.Resource реализуется в классе SvcProject.ResourceClient. Чтобы задать объект ResourceClient как переменную класса с именем resourceClient, можно использовать следующий код. В этом примере метод SetClientEndpoints создает объект resourceClient, который использует конечную точку basicHttp_Project, заданную в файле app.config. Дополнительные сведения о файле app.config см. в разделе Добавление файла конфигурации службы.

private static SvcResource.ResourceClient resourceClient;
. . .
private static void SetClientEndpoints()
{
  resourceClient = new SvcResource.ResourceClient("basicHttp_Resource");
  . . .
}
public void DisposeClients()
{
  resourceClient.Close();
  . . .
}

Примечание.

Независимо от того, используется ли сборка прокси PSI или добавляется файл прокси для ссылки на службу Project с именем SvcResource, необходимо применять этот же код для создания и размещения объекта resourceClient.

Добавление ссылки службы

Если не используется сборка прокси на основе WCF и не добавляется файл прокси для службы PSI, можно установить отдельные ссылки на службы непосредственно в Visual Studio. Вы также можете использовать шаг 1 из следующей процедуры, чтобы создать обновленные прокси-файлы, чтобы подготовиться к скрипту Documentation\IntelliSense\WCF\GenWCFProxyAssembly.cmd , который включен в пакет SDK для Project 2013.

Примечание.

Устанавливать ссылку на службу необходимо в Visual Studio на компьютере Project Server. Вместо непосредственного добавления ссылок на службы в Visual Studio рекомендуется использовать сборку прокси ProjectServerServices.dll или добавлять исходные файлы прокси.

Ниже показано, как настроить ссылку на службу с помощью Visual Studio 2012 на компьютере, на котором выполняется тестовая установка Project Server.

  1. Для доступа к внутренним службам WCF запустите Visual Studio на компьютере Project Server.

  2. В обозревателе решений щелкните правой кнопкой мыши папку References (Ссылки), а затем выберите команду Add Service Reference (Добавить ссылку на службу).

  3. В диалоговом окне Добавление ссылки на службу в текстовом поле Адрес введите <https://localhost:32843/>GUID/psi/ ServiceName.svc и нажмите клавишу ВВОД. Замените GUID именем виртуального каталога приложения службы Project Server, например 534c37eb00d74ccfadcecf9827e95239. Замените ServiceName именем службы, например Ресурс (см. рис. 3).

    Имя виртуального каталога службы Project Server можно получить одним из следующих способов.

    • Откройте приложение Центра администрирования SharePoint 2013 в браузере. Выберите элемент Управление приложениями-службами, а затем выберите нужное приложение-службу PSI Project Server. Например, выберите ProjectServerService. URL-адрес страницы Управление сайтами Project Web App содержит имя виртуального каталога. Например, в https://ServerName:8080/_admin/pwa/managepwa.aspx?appid=534c37eb-00d7-4ccf-adce-cf9827e95239имя виртуального каталога используется 534c37eb00d74ccfadcecf9827e95239 имя (имя каталога не содержит дефисов).

    • Откройте диалоговое окно диспетчера служб IIS на компьютере Project Server. Разверните узел Веб-службы SharePoint в области Подключения, а затем разворачивайте виртуальные каталоги службы, пока не найдете каталог, включающий папку PSI. Выберите этот каталог, затем в области Действия выберите пункт Дополнительные параметры и скопируйте имя каталога в поле Виртуальный путь.

      Примечание.

      Может существовать несколько виртуальных каталогов служб Project Server. Убедитесь, что выбран виртуальный каталог, содержащий нужный экземпляр Project Web App.

    • Используйте командлет get-SPServiceApplication в Windows PowerShell, установленных с SharePoint 2013. В меню Пуск панели задач последовательно выберите Программы, Продукты Microsoft SharePoint 2013 и Командная консоль SharePoint 2013. Далее приводится команда и результаты в окне командной консоли SharePoint 2013 для заданных приложений-служб (ваши GUID будут отличаться). Скопируйте GUID для приложения-службы Project Server.

          PS > get-SPServiceApplication
          DisplayName          TypeName             Id
          -----------          --------             --
          State Service        State Service        04041cfa-4ab3-4473-8bc8-3967b02eff39
          ProjectServerSer...  Project Server PS... 534c37eb-00d7-4ccf-adce-cf9827e95239
          Security Token Se... Security Token Se... 7243732e-edea-405d-8cc8-1716b99faef5
          Application Disco... Application Disco... 3bfbdeb0-bc20-4a21-801c-cc6f1ce6c643
          SharePoint Server... SharePoint Server... 09912f49-3b72-462f-a44c-6533b578286a  
      

      Если известно полное имя приложения-службы Project Server, с его помощью можно получить значение GUID, например:

      PS > $projectService = "ProjectServerService"
      PS > (get-SPServiceApplication -Name $projectService).Id
      Guid
      ----
      534c37eb-00d7-4ccf-adce-cf9827e95239
      

      Примечание.

      Удалите дефисы в GUID, чтобы получить имя виртуального каталога.

    URL-адреса, такие как https://localhost:32843/534c37eb00d74ccfadcecf9827e95239/PSI/Resource.svc стандартные для служб Project Server.

  4. После того как будет разрешена ссылка на службу, введите имя ссылки в текстовое поле Пространство имен. В примерах кода в документации разработчика Project 2013 используется произвольное имя пространства имен Svc ServiceName. Например, служба Resource в примерах кода называется SvcResource.

    Рис. 3. Добавление ссылки на службу Resource на основе WCF

    Добавление ссылки на службу ресурсов на основе WCF

  5. Замените временный файл web.config в каталоге Службы проектов исходным (переименованным в web.config), а затем повторно запустите iisreset.

Настройка других ссылок

Приложения Project Server часто используют другие службы, например веб-службы SharePoint 2013. Если требуются другие службы или ссылки, то они указываются в примере кода.

Локальные ссылки для примера кода перечисляются в операторах using вверху примера.

  1. В обозревателе решений щелкните правой кнопкой мыши папку References (Ссылки), а затем выберите команду Add Service Reference (Добавить ссылку).

  2. Нажмите кнопку Обзор, а затем найдите расположение, в котором сохранены ранее скопированные библиотеки DLL Project Server. Выберите нужные библиотеки DLL и нажмите кнопку ОК.

Примечание.

Убедитесь, что версии сборок на компьютере разработки точно соответствуют версиям на целевом компьютере Project Server.

Добавление файла конфигурации службы

Если приложение настраивает службы WCF программными средствами, то оно не использует файл конфигурации службы. В противном случае приложение Windows или консольное приложение использует элемент system.serviceModel в файле app.config; веб-приложение включает system.serviceModel в web.config. Дополнительные сведения об использовании файла app.config или программной настройке служб WCF см. в разделе Пошаговое руководство. Разработка приложений PSI с помощью WCF.

При создании исходного файла прокси службы команда SvcUtil.exe также создает файл output.config, который является основой для элемента system.serviceModel по умолчанию в файле app.config или web.config. Пакет SDK для Project 2013 содержит пример output.config файла в Documentation\IntelliSense\WCF\Source.zip. Например, файл output.config по умолчанию, создаваемый командой SvcUtil.exe для службы Resource, включает две привязки с именами BasicHttpBinding_Resource и BasicHttpBinding_Resource1. Элемент client включает две конечные точки по умолчанию. Одна конечная точка предназначена для безопасного доступа к HTTP-адресу в порте 32843, а другая — для обычного доступа в порте 32843, как показано ниже.

<client>
    <endpoint address="https://ServerName.domain:32843/GUID/PSI/Resource.svc/secure"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Resource"
        contract="SvcResource.Resource" name="BasicHttpBinding_Resource" />
address="https://ServerName.domain:32843/GUID/PSI/Resource.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Resource1"
        contract="SvcResource.Resource" name="BasicHttpBinding_Resource1" />
</client>

В конфигурации службы PSI не используются привязки и конечные точки по умолчанию. В Project Server требуется, чтобы приложения получали доступ к службам PSI через внутренний файл ProjectServer.svc, который действует как маршрутизатор для вызовов внутренних служб. Чтобы создать файл app.config, выполните следующие действия.

  1. Если устанавливается ссылка на сборку прокси ProjectServerServices.dll или добавляется исходный файл прокси для службы, то приложение не содержит файл app.config. Добавьте новый элемент в проект Visual Studio. В диалоговом окне Добавление нового элемента выберите шаблон Файл конфигурации приложения , присвойте ему имя app.config и нажмите кнопку Добавить.

  2. Удалите весь текст в файле app.config и скопируйте в этот файл следующий код. Для каждой конечной точки службы можно использовать одну и ту же привязку, например basicHttpConf. Если требуется использовать несколько привязок, например, чтобы привязать протоколы HTTP и HTTPS, то необходимо создавать привязку для каждого протокола.

        <?xml version="1.0" encoding="utf-8" ?>
        <configuration>
            <system.serviceModel>
                <behaviors>
                    <endpointBehaviors>
                        <behavior name="basicHttpBehavior">
                            <clientCredentials>
                                <windows allowedImpersonationLevel="Impersonation" />
                            </clientCredentials>
                        </behavior>
                    </endpointBehaviors>
                </behaviors>
                <bindings>
                    <basicHttpBinding>
                        <binding name="basicHttpConf" sendTimeout="01:00:00" 
                            maxBufferSize="500000000" maxReceivedMessageSize="500000000">
                            <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                                maxArrayLength="16384" maxBytesPerRead="4096" 
                                maxNameTableCharCount="500000000" />
                            <security mode="TransportCredentialOnly">
                                <transport clientCredentialType="Ntlm" realm="https://SecurityDomain" />
                            </security>
                        </binding>
                    </basicHttpBinding>
                </bindings>
                <client>
                    <endpoint address="https://ServerName/ProjectServerName/_vti_bin/PSI/ProjectServer.svc"
                        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
                        bindingConfiguration="basicHttpConf" 
                        contract="SvcServiceName.ServiceName"
                        name="basicHttp_ServiceName" />
                </client>
            </system.serviceModel>
        </configuration>
    
  3. Замените ServerName/ProjectServerName адрес конечной точки клиента именем сервера и экземпляра Project Web App.

  4. Замените ServiceName именем службы PSI, например Ресурс. Убедитесь, что заменили все три экземпляра имени службы, например:

        <endpoint address="https://myserver/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcResource.Resource"
            name="basicHttp_Resource" />
    
  5. Чтобы использовать несколько служб PSI, создайте по одному элементу endpoint для каждой службы и для каждого элемента binding, используемого этой службой. Например, следующие конечные точки настраивают клиент таким образом, чтобы базовая привязка HTTP использовалась для службы Project и службы QueueSystem.

    Примечание.

    Если вы запустили приложение и получили сообщение об ошибке, говорящее, что сервер перегружен, или что запрос HTTP не разрешен, проверьте правильность адресов конечных точек в файле app.config.

        <client>
        <endpoint address="https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcProject.Project"
            name="basicHttp_Project" />
        <endpoint address="https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcQueueSystem.QueueSystem"
            name="basicHttp_QueueSystem" />
        </client>
    

Файл app.config можно изменить с помощью Редактор конфигурации службы WCF в Visual Studio (в меню Сервис). На рисунке 4 показано, как задать элемент контракта в диалоговом окне Конфигурация службы Майкрософт Редактор. Если решение использует сборку прокси-сервера PSI, откройте ProjectServerServices.dll в bin\debug каталоге решения Visual Studio. В диалоговом окне "Браузер типов контракта " отображаются все контракты службы WCF (см. рис. 5).

Рис. 4. Использование редактора конфигураций служб WCF

Использование конфигурации службы WCF Редактор

Если решение использует файл прокси службы, например wcfResource.cs, скомпилируйте приложение, а затем откройте исполняемый файл в каталоге bin\debug . Дополнительные сведения о редактировании файла app.config см. в пошаговом руководстве Разработка приложений PSI с использованием WCF.

Рис. 5. Использование браузера типов контрактов в Редактор конфигурации службы WCF

Использование браузера типов контрактов

Использование нескольких методов проверки подлинности

Проверка подлинности локальных пользователей Project Server, с помощью Windows или на основе форм, выполняется путем обработки утверждений в SharePoint. Многократная проверка подлинности означает, что веб-приложение, в котором подготовлен Project Web App, поддерживает проверку подлинности на основе проверка подлинности Windows и на основе форм. В этом случае любой вызов службы WCF, использующий проверку подлинности Windows, завершится неудачно, поскольку процесс обработки утверждений не может определить тип пользователя, для которого нужно выполнить проверку подлинности:

The server was unable to process the request due to an internal error. For more information about the error, either turn on Include ExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.

Для устранения этой проблемы в WCF все вызовы методов PSI должны быть в области OperationContextScope, которая задается для каждой службы PSI. Не следует вкладывать области для нескольких служб; например, при использовании вызовов служб Resource и Project каждый ряд вызовов должен быть в своей собственной области.

В следующем примере метод DisableFormsAuth может вызываться из каждого раздела OperationContextScope в приложении. Этот метод удаляет каждое значение заголовка, которое ранее отключало проверку подлинности на основе форм, поэтому если параметр isWindowsAuth имеет значение false, то может выполняться проверка подлинности на основе форм. Если параметр isWindowsAuth имеет значение true, то метод DisableFormsAuth отключает проверку подлинности на основе форм.

В методе WcfSample объект projectClient является экземпляром класса SvcProject.ProjectClient PSI.

// Class variable that determines whether to disable Forms authentication.
private bool isWindowsUser = true;
public void DisableFormsAuth(bool isWindowsAuth)
{
    WebOperationContext.Current.OutgoingRequest.Headers.Remove(
        "X-FORMS_BASED_AUTH_ACCEPTED");
    if (isWindowsAuth)
    {
        // Disable Forms authentication, to enable Windows authentication.
        WebOperationContext.Current.OutgoingRequest.Headers.Add(
            "X-FORMS_BASED_AUTH_ACCEPTED", "f");
    }
}
private void WcfSample()
{
    // Limit the scope of WCF calls to the client channel. 
    using (OperationContextScope scope = new OperationContextScope(projectClient.InnerChannel))
    {
        // Add a web request header to enable Windows authentication in 
        // multiple authentication installations.
        DisableFormsAuth(isWindowsUser);
        // Add calls to the projectClient methods here:
        // . . .
    }
}

Примечание.

Выполнение вызовов PSI в области OperationContextScope необходимо только для приложений, которые выполняются в среде с использованием нескольких методов проверки подлинности. Если Project Server использует только проверку подлинности Windows, то не требуется устанавливать область и добавлять заголовок веб-запроса, который отключает проверку подлинности на основе форм.

Решение для приложения на основе ASMX отличается. Дополнительные сведения см. в разделе Использование множественной проверки подлинностистатьи Предварительные требования для примеров кода на основе ASMX в Project.

Изменение значений универсальных констант

В большинстве примеров используется одна или несколько переменных, которые необходимо обновить, чтобы пример работал в текущей среде соответствующим образом. В следующем примере при наличии SSL используйте протокол HTTPS вместо протокола HTTP. Замените ServerName на имя используемого сервера. Замените ProjectServerName именем виртуального каталога сайта сервера проекта, например PWA.

const string PROJECT_SERVER_URI = "https://ServerName/ProjectServerName/";

Все прочие переменные, которые необходимо изменить, указываются вверху примера кода.

Проверка результатов

Получение и интерпретация результатов примера кода не всегда бывает простой задачей. Например, при создании проекта необходимо опубликовать проект, прежде чем он появится на странице Центра проектов в Project Web App.

Результаты примера кода можно проверить несколькими способами; некоторые из них приведены ниже.

  • Используйте клиент Project профессиональный 2013, чтобы открыть проект с компьютера Project Server и просмотреть нужные элементы.

  • Просмотр опубликованных проектов на странице Центра проектов Project Web App ( https://ServerName/ProjectServerName/projects.aspx).

  • Просмотрите журнал очереди в Project Web App. Откройте страницу Параметры сервера (щелкните значок Параметры в правом верхнем углу), а затем выберите Мои задания в очереди в разделе Личные параметры ( https://ServerName/ProjectServerName/MyJobs.aspx). В раскрывающемся списке View (Просмотр) можно выполнить сортировку по состоянию заданий. Состояние по умолчанию — Задания в ходе выполнения и с ошибками за прошлую неделю.

  • Страница Параметры сервера в Project Web App ( https://ServerName/ProjectServerName/_layouts/15/pwa/admin/admin.aspx) используется для управления всеми заданиями очереди, а также удаления или принудительного проверка корпоративных объектов. Для доступа к этим ссылкам на странице параметров сервера требуются административные разрешения.

  • Используйте Microsoft SQL Server Management Studio для выполнения запроса в таблице базы данных Project Server. Например, с помощью следующего запроса можно получить верхние 200 строк таблицы MSP_WORKFLOW_STAGE_PDPS, чтобы просмотреть информацию о страницах сведений о проекте (PDP) на этапах рабочего процесса.

        SELECT TOP 200 [STAGE_UID]
                ,[PDP_UID]
                ,[PDP_NAME]
                ,[PDP_POSITION]
                ,[PDP_ID]
                ,[PDP_STAGE_DESCRIPTION]
                ,[PDP_REQUIRES_ATTENTION]
        FROM [ProjectService].[pub].[MSP_WORKFLOW_STAGE_PDPS]

Очистка

После тестирования некоторых примеров кода остаются корпоративные объекты и параметры, которые следует удалить или сбросить. Вы можете использовать страницу Параметры сервера в Project Web App для управления корпоративными данными ( https://ServerName/ProjectServerName/_layouts/15/pwa/admin/admin.aspx). С помощью ссылок на странице параметров сервера можно удалять старые элементы, принудительно возвращать проекты, управлять очередью заданий для всех пользователей и выполнять другие административные задачи.

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

  • Корпоративные настраиваемые поля и таблицы подстановки

  • Управление заданиями в очереди

  • Удаление корпоративных объектов

  • Принудительный возврат корпоративных объектов

  • Типы корпоративных проектов

  • Этапы рабочего процесса

  • Стадии рабочего процесса

  • Страницы сведений о проекте

  • Отчетные периоды

  • Параметры и значения по умолчанию для расписания

  • Классификации строк

Дополнительные параметры управляются SharePoint Server 2013 для каждого экземпляра Project Web App, а не определенной страницей параметров сервера Project Web App. В приложении Центра администрирования SharePoint выберите Общие параметры приложения, выберите Управление в разделе Параметры сервера Project, а затем в раскрывающемся списке на странице Параметры сервера выберите экземпляр Project Web App. Например, выберите Обработчики событий на стороне сервера, чтобы добавить или удалить обработчики событий для выбранного экземпляра Project Web App.

См. также