Traduction

Cet article est la traduction la plus fidèle possible de l'article original d'Eric White, Getting Started Building a WCF Web Service.

Introduction

Cet article est le premier d'une série d'articles en quatre parties qui montre comment créer un service Web prenant en charge les revendications et comment le consommer à partir de SharePoint Business Connectivity Services. Dans cette première partie de la série, nous allons prendre en main la création d'un service Web WCF.

Vous pouvez consulter les autres articles de la série ici.

Prise en main de la création d'un service Web WCF
(le présent article)
Montre comment créer un service Web très simple en utilisant WCF. Montre comment héberger ce service Web en utilisant IIS.
Détermination de l'identité de l'appelant au sein du service Web WCF Améliore l'exemple développé dans l'article précédent de sorte que le service Web puisse rapporter sur l'identité de son appelant de manière rigoureuse.
Établissement de la confiance entre un service Web WCF et le Security Token Service de SharePoint 2010 Configure l'exemple développé dans l'article précédent de sorte qu'il utilise un certificat auto-signé pour prendre en charge une connexion sécurisée.
Consommation d'un service Web WCF prenant en charge les revendications en tant que type de contenu externe SharePoint 2010 Examine pas à pas la procédure pour la consommation d'un service Web prenant en charge les revendications en tant que type de contenu externe SharePoint 2010.

Prise en main de la création d'un service Web WCF

Depuis peu que je travaille avec l'authentification basée sur les revendications, l'expérience que j'en fais est qu'il n'y a pas énormément d'étapes pour la faire fonctionner, mais si vous commettez la moindre erreur cela ne fonctionnera tout simplement pas et demandera un peu d'efforts afin de déterminer le problème. Mon approche dans cet article et les prochains articles de la série est de fournir certaines procédures avec des petites étapes, accompagnées d'instructions pour valider, tout au long du parcours, que ce que vous avez fait au fur et à mesure fonctionne correctement. La première étape est donc de créer un service Web WCF, de l'héberger en utilisant IIS et de valider qu'il fonctionne.

Cet article montre comment créer un service Web très simple en utilisant Windows Communications Foundation (WCF). Il y une caractéristique particulière du service Web que je présente dans cet article, celle-ci étant : bien que le service Web soit très simple, il peut être consommé en tant que type de contenu externe à partir de Business Connectivity Services. En outre, la procédure présentée dans cet article montre comment héberger ce service Web en utilisant Internet Information Services (IIS).

Ce service Web ne contient que deux méthodes : une méthode de recherche (« finder ») pour récupérer une collection d'éléments, et une méthode de recherche spécifique (« specific finder ») pour récupérer un seul élément particulier. La « base de données » sous-jacentes à la collection n'est qu'une liste initialisée. Le « schéma » de cette petite « base de données » est très simple. Il s'agit d'une seule table (fichier plat) composée de deux champs : un champ de nombres entiers, CustomerID, et un champ de chaînes, CustomerName. CustomerID représente un identifiant unique.

 
Sélectionnez
return new List<Customer>()
{
    new Customer
    {
        CustomerID = 1,
        CustomerName = "Bob",
    },
    new Customer
    {
        CustomerID = 2,
        CustomerName = "Bill",
    },
    new Customer
    {
        CustomerID = 3,
        CustomerName = "Cheryl",
    },
};

Après avoir créé et configuré ce service Web, vous pouvez utiliser SharePoint Designer 2010 pour créer un type de contenu externe à partir du service Web, puis afficher les données dans une liste SharePoint.

Image non disponible

Comme vous le savez probablement, BCS dans SharePoint Server 2010 est accessible en lecture/écriture. Si vous fournissez des méthodes supplémentaires pour créer, mettre à jour et supprimer des éléments, vous pouvez maintenir intégralement les données dans une liste. Je suis intéressé à garder ce service Web absolument aussi simple que possible, il s'agit donc seulement d'une implémentation en lecture seule. Mon accent sera mis sur les questions de sécurité et d'identité. La façon dont la base de données est stockée, l'emplacement auquel elle est stockée ou les détails du schéma ne sont pas pertinents dans le cadre de cet article.

La procédure présentée ici concerne Windows Server 2008 R2 et Windows Server 2008. Vous pouvez créer ce service Web en utilisant soit Visual Studio 2010 soit Visual Studio 2008.

Vous pouvez créer, exécuter et tester le service Web présenté dans cet article sur n'importe quel ordinateur de développement qui exécute IIS. Toutefois, si vous souhaitez vous connecter à ce service Web en tant que type de contenu externe en utilisant BCS, alors créez cet exemple sur une machine de développement SharePoint 2010, de sorte à ce que le serveur SharePoint 2010 et l'exemple de service Web soient exécutés sur le même ordinateur. Vous pouvez placer ce service Web sur une autre machine et le consommer en tant que type de contenu externe, toutefois, dans cette situation, vous devez soit supprimer la sécurité soit créer un service Web prenant en charge les revendications.

Comme je l'ai indiqué, la procédure que je présente ici montre comment héberger le service Web sous IIS. C'est la façon que la plupart des responsables d'implémentation d'un tel service Web voudront l'héberger. Son hébergement en tant que service d'IIS procure de nombreux avantages tels que le recyclage du processus, la surveillance de l'intégrité du processus et l'activation basée sur les messages.

Pré-requis pour la création de l'exemple

Cette procédure concerne Windows Server 2008 ou Windows Server 2008 R2. Dans les deux cas, j'ai commencé sur une machine dont le système d'exploitation bénéficiait des correctifs les plus récents. Ensuite, j'ai installé les rôles et fonctionnalités nécessaires afin qu'Internet Information Services (IIS) soit installé et opérationnel. En outre, les procédures présentées dans cet article requièrent la version 3.5.1 du Framework .NET, ainsi que Visual Studio 2008 ou Visual Studio 2010.

Installation de WCF et IIS

Utilisez le Gestionnaire de serveur pour installer le Rôle Serveur Web (IIS) et la fonctionnalité .NET Framework 3.5.1.

Pour exécuter cet exemple, le seul Rôle qui est requis est Serveur Web (IIS).

Image non disponible

Une fois que vous avez ajouté le rôle Serveur Web (IIS), l'Assistant Ajout de Rôles vous demandera de sélectionner des Services de Rôle. Sélectionnez Développement d'applications.

Image non disponible

Pour installer le Framework .NET, ajoutez les Fonctionnalités du .NET Framework 3.5.1.

Image non disponible

Lorsque vous êtes en train d'installer cette fonctionnalité sur Windows Server 2008 (pas sur R2), après avoir sélectionné les Fonctionnalités .NET Framework 3.0, sélectionnez Activation de WCF. Cette sélection est activée par défaut sur Windows Server 2008 R2.

Image non disponible

WCF et IIS doivent être installés pour que les services WCF hébergés par IIS fonctionnent correctement. Les procédures pour installer WCF (dans le cadre du .NET Framework 3.0) et IIS varient selon le système d'exploitation que vous utilisez. Si vous installez sur un système d'exploitation autre que Windows Server 2008 ou Windows Server 2008 R2, vous devez obtenir le Package redistribuable de Microsoft .NET Framework 3.0 pour télécharger et installer .NET Framework 3.0. Voir « Installing IIS » pour davantage d'instructions à ce sujet.

Inscription du modèle de service

Pour exécuter cet exemple, vous devez inscrire cette version de WCF et mettre à jour les mappages de scripts à la racine de la méta-base IIS.

  1. Démarrez une invite de commandes de Visual Studio. Exécutez-la en tant qu'administrateur.
    Image non disponible
  2. Cliquez sur Démarrer > Tous les programmes > Visual Studio 2010 > Outils Visual Studio, faites un clic droit sur l'Invite de commandes de Visual Studio, puis sélectionnez Exécuter en tant qu'administrateur.

    L'invite de commandes de Visual Studio se trouve à un emplacement similaire pour Visual Studio 2008.

  3. Changez pour accéder au répertoire :
  4. c:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation en saisissant cd "c:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation"

  5. Dans l'invite de commandes, saisissez :
    ServiceModelReg -i
    Image non disponible
  6. Cela n'avait pas lieu d'être une invite de commandes de Visual Studio, mais l'étape suivante requiert une invite de commandes de Visual Studio, j'en ai donc créé une à cette étape à des fins d'efficacité.

Mise à jour des mappages de scripts

Dans l'invite de commandes, saisissez :

aspnet_regiis.exe -i

Image non disponible

Création d'un service Web

  1. Créez un répertoire, C:\MyWebService, qui va contenir le service Web. Si vous utilisez un répertoire différent de celui-ci, vous allez devoir modifier ces procédures en fonction.
  2. Démarrez Visual Studio 2010 (ou 2008).
  3. Cliquez sur Fichier > Nouveau > Projet.
    1. Pour la catégorie de modèles installés, sélectionnez WCF.
    2. Pour le modèle, sélectionnez Application de service WCF.
    3. Ciblez le .NET Framework 3.5.
    4. Pour l'emplacement du projet, naviguez au répertoire que vous avez créé à l'étape 1.
    5. Nommez le projet CustomersService.
    6. Ne créez pas de répertoire pour la solution.
      Image non disponible

    Pensez à cibler .NET Framework 3.5. Par défaut, Visual Studio va cibler .NET Framework 4.0, et vous devez changer pour la version 3.5 pour que la procédure présentée ici fonctionne.

  4. Dans le projet, renommez IService1.cs en ICustomers.cs. Visual Studio 2010 demandera si vous souhaiteriez également effectuer un renommage de toutes les références à l'élément de code IService1 dans ce projet ? Cliquez sur Oui. En fait, nous allons remplacer tout le code dans tous les modules, donc qu'importe si vous cliquez sur Oui ou sur Non.
  5. Dans le projet, renommez Service1.svc en Customers.svc. Après avoir renommé ces éléments, l'Explorateur de solutions apparaîtra comme suit.
    Image non disponible
  6. Remplacez Customers.svc par la ligne de balisage unique suivante. Faites un clic droit sur Customers.svc, puis sélectionnez Afficher le balisage. Copiez la ligne suivante, collez-le dans Visual Studio et enregistrez le projet.
     
    Sélectionnez
    <%@ ServiceHost Language="C#" Debug="true" Service="CustomersService.Customers" CodeBehind="Customers.svc.cs"%>
    
  7. Remplacez Customers.svc.cs par le code suivant.
     
    Sélectionnez
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace CustomersService
    {
        public class Customers : ICustomers
        {
            // Finder
            public List<Customer> GetAllCustomers()
            {
                return new List<Customer>()
                {
                    new Customer
                    {
                        CustomerID = 1,
                        CustomerName = "Bob",
                    },
                    new Customer
                    {
                        CustomerID = 2,
                        CustomerName = "Bill",
                    },
                    new Customer
                    {
                        CustomerID = 3,
                        CustomerName = "Cheryl",
                    },
                };
            }
    
            // Specific finder
            public Customer GetCustomerByID(int CustomerID)
            {
                return GetAllCustomers().FirstOrDefault(c => c.CustomerID == CustomerID);
            }
        }
    }
    
  8. Remplacez ICustomers.cs par le code suivant.
     
    Sélectionnez
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    
    namespace CustomersService
    {
        [ServiceContract]
        public interface ICustomers
        {
            [OperationContract] //finder
            List<Customer> GetAllCustomers();
    
            [OperationContract] //specificFinder
            Customer GetCustomerByID(int CustomerID);
        }
    
        [DataContract]
        public class Customer
        {
            [DataMember]
            public int CustomerID { get; set; }
    
            [DataMember]
            public string CustomerName { get; set; }
        }
    }
    
  9. Remplacez Web.config par le balisage suivant. Dans l'Explorateur de solutions, faites un clic droit sur Web.config, puis sélectionnez Modifier. Copiez, collez et enregistrez les lignes suivantes.

    Il s'agit du Web.config qui configure ce service Web particulier. Il est localisé à l'emplacement C:\MyWebService\CustomersService.

     
    Sélectionnez
    <?xml version="1.0"?>
    <configuration>
      <system.serviceModel>
        <services>
          <service behaviorConfiguration="CustomersService.ServiceBehavior"
            name="CustomersService.Customers">
            <endpoint address="" binding="wsHttpBinding" contract="CustomersService.ICustomers">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="CustomersService.ServiceBehavior">
              <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpGetEnabled="true"/>
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    
  10. Compilez l'application.
  11. Ajoutez une application au site Web par défaut.
    1. Démarrez le Gestionnaire IIS. Cliquez sur Démarrer > Tous les programmes > Outils d'administration > Gestionnaire IIS.
    2. Dans le Gestionnaire IIS, développez Sites, faites un clic droit sur Site Web par défaut, puis sélectionnez Ajouter une application.
      Image non disponible
    3. Dans la boîte de dialogue Ajouter une application, dans le champ Alias, saisissez Customers. Dans le champ Chemin d'accès physique, naviguez à C:\MyWebService\CustomersService. Cliquez sur OK deux fois.
      Image non disponible
  12. Validez que le service Web est en cours d'exécution. Démarrez Internet Explorer et naviguez à http://localhost/Customers/Customers.svc. Si le service Web est en cours d'exécution, vous devrez voir ceci :
    Image non disponible

    Une autre approche intéressante pour tester le service Web consiste à utiliser le client test WCF. Démarrez une invite de commandes de Visual Studio (ou utilisez celle qui est ouverte depuis le début de cette procédure). Tapez wcftestclient pour exécuter le client test WCF. Cliquez sur Fichier > Ajouter un service. Saisissez http://localhost/Customers/Customers.svc comme adresse du point de terminaison, puis cliquez sur OK.

    Image non disponible

    Si le service a été ajouté avec succès, vous allez voir les méthodes que le service expose.

    Image non disponible

    Double-cliquez sur GetAllCustomers. Cela ouvre une fenêtre qui vous permet de configurer et de d'appeler la requête. Cliquez sur Appeler pour voir la réponse du service Web.

    Image non disponible

Conclusion

Dans ce premier article de la série, nous avons vu comment créer un service Web, que nous avons compilé et que nous avons hébergé sous IIS. Dans l'article suivant, nous ajouterons quelques fonctionnalités de Windows Identity Foundation (WIF) que nous pouvons utiliser de manière à déterminer l'identité de l'appelant du service Web.

Remerciements

Je tiens ici à remercier Eric White de m'avoir autorisé à traduire son article.
Je remercie xyz pour sa relecture technique et ses propositions.
Je remercie également abc pour sa relecture orthographique et ses propositions.