Создание службы данных OData для использования в качестве внешней системы BCS

Узнайте, как создать интернет-адресуемую службу WCF, которая использует OData для отправки уведомлений в SharePoint при изменении базовых данных. Эти уведомления используются для запуска событий, которые прикреплены ко внешним спискам.

В этой статье описывается создание ASP.NET Windows Communication Foundation (WCF) службе данных предоставлять образца базы данных AdventureWorks LT 2012 г. Это позволяет получать доступ к данным посредством протокола Open Data protocol (OData). При установке доступа через OData можно настроить внешний тип контента Business Connectivity Services (BCS), который позволит SharePoint использовать данные из внешней базы данных. Для дальнейшего улучшения этого источника OData, можно добавить контракты службы WCF службу, которая позволит BCS для подписки на уведомления, оповещающие об изменении внешних данных.

Необходимые условия для создания службы OData

Создание службы OData в этой статье необходимо соблюдение следующих условий:

Сведения о настройке среды разработки см. в статье Настройка общей среды разработки для SharePoint.

Основные понятия, которые создания службы OData

В таблице 1 приведены статьи, которые помогут вам понять основные концепции создания WCF службы с помощью OData и внешнее содержимое.

Таблица 1. Основные понятия, которые создания службы OData

Ресурс Описание
Использование источников OData со службами Business Connectivity Services в SharePoint Содержит сведения, которые помогут вам приступить к созданию внешних типов контента на основе источников OData и использованию данных в компонентах SharePoint или Microsoft 365.
Как: создать внешний тип контента из источника OData в SharePoint Узнайте, как с помощью Visual Studio 2022 обнаружить опубликованный источник OData и создать многократно используемый внешний тип контента для использования в BCS в SharePoint.
Протокол Open Data Protocol Предоставляет сведения о протоколе Open Data, включая определения протоколов, сведения об архитектуре и примеры использования.
Обзор служб данных WCF WCF Службы данных включает создание и использование служб данных для веб-сайта или в интрасети с помощью OData. OData позволяет предоставлять данные как ресурсы, которые являются адресации с помощью URI.
Разработка и развертывание служб данных WCF Предоставляет сведения о разработке и развертывании WCF службы данных.

Действия для создания внешней системы

Необходимо выполнить следующие действия.

  • Установка образца базы данных AdventureWorks LT 2012 г.
  • Создание службы OData
  • Настройка разрешений на доступ
  • Тестирование службы
  • Добавление возможности для дополнительные функциональные возможности BCS

Установка образца базы данных

Внешней системой обычно является база данных, и по этой причине в этом примере показано, как использовать образец базы данных AdventureWorks 2012 LT для представления собственного источника данных.

Как создать WCF службы OData

Создание службы Windows Communication Foundation (WCF), который может осуществляться через протокол OData относительно несложно. Visual Studio 2022 предоставляет несколько средств для автоматического обнаружения и моделирования данных из различных источников данных. Это позволяет создавать подключения и интерфейсы к данным в базах данных SQL Server и другие типы хранилищ данных, которые можно работать с программным путем с помощью обширную объектную модель.

Тем не менее, чтобы sharePoint позволило BCS получать уведомления от удаленных систем при изменении базовых данных, необходимо изменить службу WCF, чтобы реагировать на эти изменения.

Чтобы создать проект на основе WCF

  1. В Visual Studio, в меню файл выберите Создать, проект.
  2. В диалоговом окне Создать проект выберите веб- шаблон и выберите Веб-приложение ASP.NET.
  3. Введите AdventureWorksService для имени проекта и нажмите кнопку ОК.
  4. В Окне Обозреватель решений откройте контекстное меню для проекта ASP.NET, который вы только что создали и выберите пункт Свойства.
  5. Откройте вкладку Веб и задайте для текстового поля Конкретный портзначение 8008.

Чтобы определить модели данных

  1. В Обозревателе решений откройте контекстное меню для проекта ASP.NET и выберите команду Добавить новый элемент.
  2. В диалоговом окне Добавление нового элемента выберите шаблон данных и выберите Модель данных ADO.NET сущности.
  3. Имя модели данных введите AdventureWorks.edmx.
  4. В окне Мастера модели данных сущности выберите Создать из базы данных и нажмите кнопку Далее.
  5. Подключения к базе данных модели данных, выполнив одно из следующих действий и нажмите кнопку Далее.
    • Если у вас уже настроено подключение к базе данных, выберите Новое подключение и создайте новое подключение.
    • При наличии подключения к базе данных, уже настроена для подключения к базе данных Northwind, выберите это подключение в списке подключения.
    • На последней странице мастера установите флажки для всех таблиц в базе данных и снимите флажки для представлений и хранимых процедур.
  6. Нажмите кнопку Готово, чтобы закрыть мастер.

Чтобы создать службу данных

  1. В Обозревателе решений откройте контекстное меню для проекта ASP.NET и выберите команду Добавить новый элемент.

  2. В диалоговом окне Добавление нового элемента выберите Службы данных WCF.

  3. Имя службы введите AdventureWorks.

    Visual Studio создает XML-разметку и файлы кода для новой службы. По умолчанию откроется окно редактора кода. В Обозреватель решений служба будет иметь имя AdventureWorks с расширением .svc.cs или .svc.vb.

  4. Замените комментарий /* TODO: put your data source class name here */ в определении класса, определяющего службу данных, типом, который является контейнером сущностей модели данных, который в данном случае является AdventureWorksEntities. Определения класса должен выглядеть следующим образом:

public class AdventureWorks : DataService<AdventureWorksEntities>

По умолчанию при создании службы WCF, он становится недоступной из-за его настройки безопасности. На следующем шаге можно указать, кто может получить к нему доступ и какие у них есть права.

Чтобы разрешить доступ к ресурсам службы данных

В коде для службы данных замените заполнитель код в функцию InitializeService следующее.

config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);

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

Примечание.

[!Примечание] Каждый клиент, который можно получить доступ к приложению ASP.NET также можно получить доступ к ресурсы, предоставляемые службой данных. В службе данных рабочей для предотвращения несанкционированного доступа к ресурсам, вам следует также защитить само приложение. Дополнительные сведения см. в разделе Защита WCF Data Services.

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

На последнем этапе Создание службы является добавление операции службы для Subscribe и Unsubscribe стереотипов, определенных в модели BDC.

Чтобы добавить операции службы для подписки на и отписаться стереотипов

В файле AdventureWorks.cs добавьте следующее объявление строковой переменной:

public string subscriptionStorePath = @"\\\\[SHARE_NAME]\\SubscriptionStore\\SubscriptionStore.xml";

Примечание.

Этот файл представляет собой XML-файл, который обновляется с помощью новых подписок. Доступ к этому файлу будет осуществляться серверным процессом, поэтому убедитесь, что вы предоставили достаточные права на доступ к этому файлу. Вы также можете создать решение базы данных для хранения сведений о подписке.

Добавьте следующие два метода WebGet для обработки подписки.

[WebGet]
public string Subscribe(string deliveryUrl, string eventType)
{
  string subscriptionId = Guid.NewGuid().ToString();

  XmlDocument subscriptionStore = new XmlDocument();

  subscriptionStore.Load(subscriptionStorePath);

  // Add a new subscription element.
  XmlNode newSubNode = subscriptionStore.CreateElement("Subscription");

  // Add subscription ID element to the subscription element.
  XmlNode subscriptionIdStart = subscriptionStore.CreateElement("SubscriptionID");
  subscriptionIdStart.InnerText = subscriptionId;
  newSubNode.AppendChild(subscriptionIdStart);

  // Add delivery URL element to the subscription element.
  XmlNode deliveryAddressStart = subscriptionStore.CreateElement("DeliveryAddress");
  deliveryAddressStart.InnerText = deliveryUrl;
  newSubNode.AppendChild(deliveryAddressStart);

  // Add event type element to the subscription element.
  XmlNode eventTypeStart = subscriptionStore.CreateElement("EventType");
  eventTypeStart.InnerText = eventType;
  newSubNode.AppendChild(eventTypeStart);

  // Add the subscription element to the root element.
  subscriptionStore.AppendChild(newSubNode);

  subscriptionStore.Save(subscriptionStorePath);

  return subscriptionId;
}

[WebGet]
public void Unsubscribe(string subscriptionId)
{
  XmlDocument subscriptionStore = new XmlDocument();
  subscriptionStore.Load(subscriptionStorePath);

  XmlNodeList subscriptions = subscriptionStore.DocumentElement.ChildNodes;
  foreach (XmlNode subscription in subscriptions)
  {
    XmlNodeList subscriptionList = subscription.ChildNodes;
    if (subscriptionList.Item(0).InnerText == subscriptionId)
    {
      subscriptionStore.DocumentElement.RemoveChild(subscription);
      break;
    }
  }

  subscriptionStore.Save(subscriptionStorePath);
}

Дальнейшие действия

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

См. также