Compartir vía


Crear un servicio de datos OData para su uso como un sistema externo de BCS

Obtenga información sobre cómo crear un servicio WCF direccionable de Internet que use OData para enviar notificaciones de SharePoint cuando cambian los datos subyacentes. Estas notificaciones se usan para desencadenar eventos asociados a listas externas.

Este artículo describe cómo crear un servicio de datos ASP.NET Windows Communication Foundation (WCF) para mostrar la base de datos de ejemplo AdventureWorks 2012 LT. Esto le permite acceder a los datos por el protocolo Open Data (OData). Cuando el acceso se establece a través de OData, puede configurar un tipo de contenido externo de los servicios de conectividad empresarial (BCS) que permitirá a SharePoint utilizar los datos de la base de datos externa. Para mejorar esta fuente de OData, puede agregar contratos de servicio al servicio WCF que permitirán a BCS suscribirse a notificaciones que indiquen que se ha cambiado los datos externos.

Requisitos previos para la creación del servicio OData

para crear el servicio OData de este artículo se necesita lo siguiente:

Para obtener información sobre cómo configurar el entorno de desarrollo, vea Configurar un entorno de desarrollo general para SharePoint.

Conceptos básicos para crear un servicio OData

La tabla 1 enumera los artículos que le ayudarán a comprender los conceptos básicos para la creación de un servicio WCF con OData y contenido externo.

Tabla 1. Conceptos básicos para crear un servicio OData

Recurso Descripción
Uso de orígenes OData con Servicios de conectividad empresarial en SharePoint
Proporciona información para ayudarle a comenzar a crear tipos de contenido externo basados en orígenes OData y usar esos datos en componentes de SharePoint o Office 2013.
Cómo crear un tipo de contenido externo desde un origen de OData en SharePoint
Aprenda a usar Visual Studio 2012 para descubrir un origen OData publicado y crear un tipo de contenido externo reutilizable para usarlo en BCS en SharePoint.
Open Data Protocol
Proporciona información sobre el protocolo de datos abierto, incluidas definiciones de protocolo, información sobre la arquitectura y ejemplos de uso.
Información general acerca de WCF Data Services
WCFLos servicios de datos permiten la creación y el uso de servicios de datos para la web o una intranet mediante OData. OData permite exponer sus datos como recursos que son direccionables por URI.
Desarrollar e implementar WCF Data Services
Proporciona información sobre el desarrollo y la implementación de los servicios de datos de WCF.

Pasos necesarios para crear el sistema externo

Se deben completar los pasos siguientes

  • Instalar la base de datos de ejemplo de AdventureWorks 2012 LT

  • Crear el servicio OData

  • Establecer los permisos de acceso

  • Probar el servicio

  • Agregar características para la funcionalidad adicional de BCS

Instalar la base de datos de ejemplo

Un sistema externo suele ser una base de datos y, por esa razón, en este ejemplo se muestra cómo usar la base de datos de ejemplo AdventureWorks 2012 LT para representar un origen de datos de propietario.

Los pasos siguientes

Cómo crear el servicio OData de WCF

La creación de un servicio Windows Communication Foundation (WCF) al que se puede obtener acceso a través del protocolo OData es relativamente sencillo. Visual Studio 2012 proporciona varias herramientas para descubrir y modelar datos de diversos orígenes de datos automáticamente. Esto le permite crear conexiones e interfaces de datos en bases de datos SQL Server y otros tipos de almacenes de datos con los que se puede trabajar mediante programación utilizando un modelo de objeto extensivo.

Sin embargo, para que SharePoint habilite BCS para que reciba notificaciones de sistemas remotos cuando han cambiado los datos subyacentes, debe modificar el servicio WCF para responder a esos cambios.

Para crear un nuevo proyecto de WCF

  1. En Visual Studio, en el menú Archivo, elija Nuevo, Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, elija la plantilla Web y, a continuación, Aplicación web ASP.NET.

  3. Escriba AdventureWorksService como nombre del proyecto y haga clic en Aceptar.

  4. En el Explorador de soluciones, abra el menú contextual del proyecto ASP.NET que acaba de crear y elija Propiedades.

  5. Seleccione la pestaña Web y establezca el valor del cuadro de texto Puerto específico en8008.

Para definir el modelo de datos

  1. En el Explorador de soluciones, abra el menú contextual del proyecto ASP.NET y elija Agregar nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, elija la plantilla Datos y, a continuación, Modelo de datos de entidad ADO.NET.

  3. En el nombre del modelo de datos, escriba AdventureWorks.edmx.

  4. En el Asistente para el modelo de datos de entidad, elija Generar desde base de datos y, a continuación, Siguiente.

  5. Conecte el modelo de datos a la base de datos mediante uno de los pasos siguientes y, a continuación, elija siguiente.

  • Si no tiene una conexión de base de datos ya configurada, elija Nueva conexión y cree una conexión nueva.

  • Si tiene una conexión de base de datos ya configurada para conectarse a la base de datos Northwind, elija esa conexión en la lista de conexiones.

  • En la última página del asistente, active las casillas de todas las tablas de la base de datos y, a continuación, desactive las casillas de vistas y procedimientos almacenados.

  1. Elija Finalizar para cerrar el asistente.

Para crear el servicio de datos

  1. En el Explorador de soluciones, abra el menú contextual del proyecto ASP.NET y, a continuación, elija Agregar nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, elija WCF Data Service.

  3. En el nombre del servicio, escriba AdventureWorks.

    Visual Studio crea los archivos de marcado y código XML para el nuevo servicio. De forma predeterminada, se abre la ventana del editor de código. En el Explorador de soluciones, el servicio tendrá el nombre AdventureWorks, con la extensión .svc.cs o .svc.vb.

  4. Reemplace el comentario /* TODO: put your data source class name here */ en la definición de la clase que define el servicio de datos por el tipo que es el contenedor de entidades del modelo de datos, que en este caso es AdventureWorksEntities. La definición de clase debe tener el siguiente aspecto:

  
public class AdventureWorks : DataService<AdventureWorksEntities>

De forma predeterminada, no se puede obtener acceso al crear el servicio WCF debido a su configuración de seguridad. El siguiente paso le permite especificar quién puede acceder al mismo y qué derechos tiene.

Para permitir el acceso a recursos del servicio de datos

  • En el código del servicio de datos, cambie el código del marcador de posición de la función InitializeService con el siguiente.
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);

Esto permite que clientes autorizados tengan acceso de lectura y escritura a los recursos de los conjuntos de la entidad especificada.

Nota:

Cualquier cliente que pueda acceder a la aplicación ASP.NET también puede acceder a los recursos expuestos por el servicio de datos. En un servicio de datos de producción, para evitar el acceso no autorizado a los recursos, debería también asegurar la propia aplicación. Para obtener más información, consulte Protección de WCF Data Services.

Para que BCS reciba notificaciones, debe haber un mecanismo en el origen de datos back-end que acepte una solicitud para agregar y eliminar suscripciones de notificación.

El último paso en la creación del servicio es agregar operaciones de servicio a los estereotipos Subscribe y Unsubscribe que se definen en el modelo BDC.

Para agregar operaciones de servicio a los estereotipos Suscribir y Cancelar suscripción

  • En la página AdventureWorks.cs, agregue la siguiente declaración de variables de cadena.
public string subscriptionStorePath = @"\\\\[SHARE_NAME]\\SubscriptionStore\\SubscriptionStore.xml";

Nota:

Este archivo es un archivo XML que se actualiza con las nuevas suscripciones. El acceso a este archivo se hará por el proceso del servidor, así que asegúrese de que ha concedido los derechos necesarios para el acceso a este archivo. > También puede crear una solución de base de datos para almacenar información de suscripción.

A continuación, agregue los dos métodos siguientes WebGet para controlar las suscripciones.

[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);
}

Pasos siguientes

Para notificar a SharePoint que se han realizado cambios, también necesita crear un servicio que consulte los cambios en el origen de datos y luego envíe notificaciones a todos los suscritos a notificaciones.

Vea también