Exposition de services WCF au script client
Mise à jour : novembre 2007
Windows Communication Foundation (WCF) est le modèle de programmation unifié de Microsoft pour générer des applications orientées service. Il prend en charge ASP.NET AJAX et le format de données JSON (JavaScript Objet Notation). Ce modèle permet aux services WCF d'exposer des fonctionnalités dans des pages Web qui exécutent le code ECMAScript (Javascript) et qui peuvent par conséquent accéder à ces services en utilisant des requêtes HTTP.
Si vous avez déjà créé des services WCF, vous pouvez ajouter des points de terminaison pour permettre au script des pages Web AJAX d'accéder à ces services. Cette rubrique explique comment rendre un service WCF accessible par JavaScript, exécuté dans le navigateur.
Le .NET Framework crée automatiquement des classes proxy JavaScript pour les services WCF lors du chargement de la page puis télécharge le script de classe proxy sur le navigateur. Ces classes proxy sont dérivées de la classe Sys.Net.WebServiceProxy dans Microsoft AJAX Library.
Vous pouvez appeler une opération de service WCF en appelant la méthode correspondante de la classe proxy JavaScript. Pour plus d'informations, consultez Appel de services Web à partir du script client.
Génération d'un service WCF accessible à partir du script client
Pour rendre un service WCF accessible à partir d'un script client, celui-ci doit satisfaire aux spécifications suivantes :
Le service doit être hébergé par une application Web qui contient un fichier avec une extension .svc. Ce fichier contient une directive @ ServiceHost qui pointe vers le service WCF. L'exemple suivant illustre une directive @ ServiceHost.
<%@ ServiceHost Language=C# Service="Aspnet.Samples.SimpleService" CodeBehind="~/App_Code/SimpleService.cs"%>
<%@ ServiceHost Language=VB Service="Aspnet.Samples.SimpleService" CodeBehind="~/App_Code/SimpleService.vb"%>
Vous devez configurer l'application Web pour prendre en charge l'appel de services Web à partir du script. Pour plus d'informations, consultez Comment : configurer les services WCF dans ASP.NET AJAX.
Le service doit être une classe qui implémente une interface marquée avec ServiceContractAttribute. Les opérations de service individuelles (méthodes) à appeler à partir du script doivent être qualifiées avec l'attribut OperationContractAttribute.
L'exemple suivant illustre une classe qui implémente une interface marquée avec ServiceContractAttribute.
namespace Samples.Aspnet
{
[ServiceContract(Namespace="MyServices.org")]
public interface ISimpleService
{
[OperationContract]
string HelloWorld1(string value1);
[OperationContract]
string HelloWorld2(DataContractType dataContractValue1);
}
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService : ISimpleService
{
public SimpleService()
{ }
public string HelloWorld1(string value1)
{
return "Hello " + value1;
}
public string HelloWorld2(DataContractType dataContractValue1)
{
return "Hello " + dataContractValue1.FirstName +
" " + dataContractValue1.LastName;
}
}
[DataContract]
public class DataContractType
{
string firstName;
string lastName;
[DataMember]
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
[DataMember]
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
}
Namespace Aspnet.Samples.SimpleService
<ServiceContract(NameSpace="MyServices.org")> _
Public Interface ISimpleService
<OperationContract()> _
Function HelloWorld1(ByVal value1 As String) As String
<OperationContract()> _
Function HelloWorld2(ByVal dataContractValue1 _
As DataContractType) As String
End Interface 'ISimpleService
<ServiceBehavior(IncludeExceptionDetailInFaults:=True), _
AspNetCompatibilityRequirements(RequirementsMode:= _
AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class SimpleService
Implements ISimpleService
Public Sub New()
End Sub 'New
Public Function HelloWorld1(ByVal value1 As String) As String _
Implements ISimpleService.HelloWorld1
Return "Hello " + value1
End Function 'HelloWorld1
Public Function HelloWorld2(ByVal dataContractValue1 _
As DataContractType) As String _
Implements ISimpleService.HelloWorld2
Return "Hello " + dataContractValue1.FirstName + " " + _
dataContractValue1.LastName
End Function 'HelloWorld2
End Class 'SimpleService
<DataContract()> _
Public Class DataContractType
Private _firstName As String
Private _lastName As String
<DataMember()> _
Public Property FirstName() As String
Get
Return _firstName
End Get
Set(ByVal value As String)
_firstName = value
End Set
End Property
<DataMember()> _
Public Property LastName() As String
Get
Return _lastName
End Get
Set(ByVal value As String)
_lastName = value
End Set
End Property
End Class 'DataContractType
End Namespace
Pour plus d'informations, consultez Création de services WCF pour ASP.NET AJAX (en anglais).
Utilisation d'un service WCF à partir d'un script client d'une page Web ASP.NET
Pour appeler un service WCF à partir d'un script client d'une page Web ASP.NET, ajoutez tout d'abord un contrôle ScriptManager à la page. Définissez ensuite de façon déclarative l'objet ServiceReference en ajoutant un élément enfant asp:ServiceReference au contrôle ScriptManager et en définissant son attribut path afin qu'il pointe vers le service WCF. L'exemple suivant illustre une référence de service.
<asp:ScriptManager ID="ScriptManager1" >
<Services>
<asp:ServiceReference
Path="http://<serverhost>/SimpleService.svc"/>
</Services>
</asp:ScriptManager>
L'objet ServiceReference ne peut référencer qu'un seul service Web par domaine. Le chemin d'accès du service Web peut être relatif, relatif à l'application, relatif au domaine ou absolu. Pour les chemins d'accès absolus, vous devez vous assurer que le chemin d'accès est dans le même domaine.
Lorsqu'une page qui contient ce contrôle ScriptManager s'affiche, elle crée une classe proxy JavaScript pour le service WCF. La classe proxy possède des fonctions qui correspondent à chaque opération de service. La page contient également des classes proxy JavaScript qui correspondent aux types de données de serveur utilisés comme paramètres d'entrée ou valeurs de retour pour les méthodes de service Web. Cela vous permet d'écrire un script client qui initialise ces paramètres et de les passer à l'appel de méthode.
Voir aussi
Concepts
Utilisation de services Web dans ASP.NET AJAX
Appel de services Web à partir du script client
Autres ressources
Prise en charge du format JSON et d'autres formats de transfert de données
Comment : utiliser la configuration pour ajouter un point de terminaison AJAX ASP.NET
Création de services WCF pour ASP.NET AJAX
Comment : créer un service WCF compatible AJAX et un client ASP.NET qui accède à ce service