Esposizione di servizi WCF a script client
Aggiornamento: novembre 2007
Windows Communication Foundation (WCF) è il modello di programmazione unificato di Microsoft per la compilazione di applicazioni orientate ai servizi. Supporta ASP.NET AJAX e il formato dati JSON (JavaScript Object Notation). Il modello consente ai servizi WCF di esporre le funzionalità alle pagine Web che eseguono il codice ECMAScript (JavaScript) e possono pertanto accedere a tali servizi tramite richieste HTTP.
Se sono già stati creati servizi WCF, è possibile aggiungere endpoint per consentirne l'accesso allo script nelle pagine Web con supporto AJAX. In questo argomento viene descritto come rendere disponibile un servizio WCF per JavaScript eseguito nel browser.
.NET Framework crea automaticamente classi proxy JavaScript per i servizi WCF al momento del caricamento della pagina e scarica lo script della classe proxy nel browser. Le classi proxy derivano dalla classe Sys.Net.WebServiceProxy in Microsoft AJAX Library.
Per chiamare un'operazione del servizio WCF, è possibile chiamare il metodo corrispondente della classe proxy JavaScript. Per ulteriori informazioni, vedere Chiamata a servizi Web da script client.
Come rendere accessibile un servizio WCF dallo script client
Per rendere disponibile un servizio WCF dallo script client, è necessario che il servizio soddisfi i requisiti seguenti:
Il servizio deve essere ospitato da un'applicazione Web che contiene un file con estensione svc. Questo file contiene una direttiva @ ServiceHost che punta al servizio WCF. Nell'esempio riportato di seguito viene illustrata una direttiva @ 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"%>
È necessario configurare l'applicazione Web affinché supporti la chiamata di servizi Web dallo script. Per ulteriori informazioni, vedere Procedura: configurare servizi WCF in ASP.NET AJAX.
Il servizio deve essere una classe che implementa un'interfaccia contrassegnata con ServiceContractAttribute. Le singole operazioni del servizio (metodi) da chiamare dallo script devono essere qualificate con l'attributo OperationContractAttribute.
Nell'esempio riportato di seguito viene mostrata una classe che implementa un'interfaccia contrassegnata con 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
Per ulteriori informazioni, vedere Creazione di servizi WCF per ASP.NET AJAX (informazioni in lingua inglese).
Utilizzo di un servizio WCF dallo script client in una pagina Web ASP.NET
Per chiamare un servizio WCF dallo script client in una pagina Web ASP.NET, è innanzitutto necessario aggiungere un controllo ScriptManager alla pagina. Poi occorre impostare in modo dichiarativo l'oggetto ServiceReference aggiungendo un elemento figlio asp:ServiceReference al controllo ScriptManager e impostandone l'attributo path in modo che punti al servizio WCF. Nell'esempio riportato di seguito viene illustrato un riferimento a un servizio.
<asp:ScriptManager ID="ScriptManager1" >
<Services>
<asp:ServiceReference
Path="http://<serverhost>/SimpleService.svc"/>
</Services>
</asp:ScriptManager>
L'oggetto ServiceReference può fare riferimento a un servizio Web solo nello stesso dominio. Il percorso del servizio Web può essere relativo, relativo all'applicazione, relativo al dominio o assoluto. Nel caso dei percorsi assoluti, è necessario assicurarsi che il percorso si trovi nello stesso dominio.
Quando viene eseguito il rendering del ScriptManager contenuto in una pagina, viene creata una classe proxy JavaScript per il servizio WCF. La classe proxy ha funzioni che corrispondono a ogni operazione del servizio. La pagina contiene anche classi proxy JavaScript corrispondenti ai tipi di dati del server utilizzati come parametri di input o valori restituiti per i metodi del servizio Web. Ciò consente di scrivere script client che inizializzano questi parametri e di passare tali parametri alla chiamata al metodo.
Vedere anche
Concetti
Utilizzo dei servizi Web in ASP.NET AJAX
Chiamata a servizi Web da script client
Altre risorse
Supporto per JSON e altri formati di trasferimento dati
Procedura: aggiungere un endpoint ASP.NET AJAX con l'utilizzo della configurazione
Creazione di servizi WCF per ASP.NET AJAX
Procedura: creare un servizio WCF compatibile con AJAX e un client ASP.NET che accede al servizio