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.
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.
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).
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.
Pour installer le Framework .NET, ajoutez les Fonctionnalités du .NET Framework 3.5.1.
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.
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.
- Démarrez une invite de commandes de Visual Studio. Exécutez-la en tant qu'administrateur.
- Changez pour accéder au répertoire :
- Dans l'invite de commandes, saisissez :
ServiceModelReg -i
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.
c:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation en saisissant cd "c:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation"
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
Création d'un service Web▲
- 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.
- Démarrez Visual Studio 2010 (ou 2008).
- Cliquez sur Fichier > Nouveau > Projet.
- Pour la catégorie de modèles installés, sélectionnez WCF.
- Pour le modèle, sélectionnez Application de service WCF.
- Ciblez le .NET Framework 3.5.
- Pour l'emplacement du projet, naviguez au répertoire que vous avez créé à l'étape 1.
- Nommez le projet CustomersService.
- Ne créez pas de répertoire pour la solution.
- 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.
- Dans le projet, renommez Service1.svc en Customers.svc. Après avoir renommé ces éléments, l'Explorateur de solutions apparaîtra comme suit.
- 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
"
%
>
- 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
CustomerGetCustomerByID
(int
CustomerID){
return
GetAllCustomers
().
FirstOrDefault
(c=
>
c.
CustomerID=
=
CustomerID);
}
}
}
- 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
CustomerGetCustomerByID
(int
CustomerID);
}
[
DataContract]
public
class
Customer{
[
DataMember]
public
int
CustomerID{
get;
set;
}
[
DataMember]
public
string
CustomerName{
get;
set;
}
}
}
- 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
>
- Compilez l'application.
- Ajoutez une application au site Web par défaut.
- Démarrez le Gestionnaire IIS. Cliquez sur Démarrer > Tous les programmes > Outils d'administration > Gestionnaire IIS.
- Dans le Gestionnaire IIS, développez Sites, faites un clic droit sur Site Web par défaut, puis sélectionnez Ajouter une application.
- 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.
- 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 :
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.
Si le service a été ajouté avec succès, vous allez voir les méthodes que le service expose.
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.
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.
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.