Condividi tramite


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