Expondo Serviços WCF para Scripts de Cliente

Windows Communication Foundation (WCF) é o modelo de programação unificado Microsoft para a criação de aplicativos orientado a serviços.Ele oferece suporte a AJAX ASP.NET e ao formato de dados JavaScript Object Notation (JSON).O modelo permite serviços WCF para expor a funcionalidade para páginas da Web que executam código ECMAScript (JavaScript) e, portanto, que podem acessar esses serviços usando solicitações HTTP.

Se você já tiver criado serviços WCF, você pode adicionar pontos de extremidade para habilitar scripts em páginas da Web habilitadas para AJAX para acessar esses serviços.Este tópico descreve como disponibilizar um serviço WCF para JavaScript que executa no navegador.

O .NET Framework cria automaticamente classes de proxy JavaScript para os serviços WCF a cada vez que a página carregar e faz download do script de classe de proxy para o navegador.Essas classes de proxy são derivadas da classe Sys.Net.WebServiceProxyMicrosoft AJAX Library.

Você pode chamar uma operação de serviço WCF chamando o método correspondente da classe de proxy JavaScript.Para obter mais informações, consulte Chamando Serviços da Web de Scripts Clientes.

Fazendo um Serviço WCF Acessível a partir de Script de Cliente

Para disponibilizar um serviço WCF de script de cliente, ele deve satisfazer os requisitos a seguir:

  • O serviço deve ser hospedado por um aplicativo da Web que contém um arquivo que possui uma extensão .svc.This file contains an @ ServiceHost directive that points to the WCF service.The following example shows a @ ServiceHost directive.

    <%@ ServiceHost Language=C# Service="Aspnet.Samples.SimpleService" CodeBehind="~/App_Code/SimpleService.cs"%> 
    
    <%@ ServiceHost Language=VB Service="Aspnet.Samples.SimpleService" CodeBehind="~/App_Code/SimpleService.vb"%> 
    
  • Você deve configurar o aplicativo da Web para oferecer suporte aos serviços da Web chamados a partir de script.Para obter mais informações, consulte Como: Configurar os serviços WCF ASP.NET AJAX.

  • O serviço deve ser uma classe que implementa uma interface marcada com ServiceContractAttribute.Operações de serviço individuais (métodos) a serem chamados a partir de script devem ser qualificados com o atributo OperationContractAttribute.

O exemplo a seguir mostra uma classe que implementa uma interface que está marcada com 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

Para obter mais informações, consulte Criar serviços WCF para ASP.NET.

Usando um Serviço WCF do Script de Cliente em uma Página da Web do ASP.NET

Para chamar um serviço WCF de script de cliente em um página da Web o ASP.NET, você primeiro adicionar um ScriptManager controle à página.Você então define declarativamente o objeto ServiceReference, adicionando um elemento filho asp:ServiceReference para o controle ScriptManager e definindo seu atributo path para apontar para o serviço WCFO exemplo a seguir mostra um serviço de referência.

<asp:ScriptManager ID="ScriptManager1" >
  <Services>
    <asp:ServiceReference 
      Path="http://<serverhost>/SimpleService.svc"/>
  </Services>
</asp:ScriptManager>

O objeto ServiceReference pode fazer referência a um serviço Web somente no mesmo domínio.O caminho do serviço Web pode ser relativo, relativo ao aplicativo, relativo ao domínio ou absoluto.Para caminhos absolutos, você deve se certificar que o caminho está no mesmo domínio.

Quando uma página que contém este controle ScriptManager é processada, ela cria uma classe de proxy JavaScript para o serviço WCF.A classe de proxy tem funções que correspondem a cada operação de serviço.A página também contém classes de proxy JavaScript que correspondem aos tipos de dados do servidor que são usados como parâmetros de entrada ou retornam valores para os métodos de serviço Web.Isso permite que você escreva script de cliente que inicializa esses parâmetros e o passe para chamada de método.

Consulte também

Conceitos

Usando Serviço Web AJAX ASP.NET

Chamando Serviços da Web de Scripts Clientes

Outros recursos

Support for JSON and Other Data Transfer Formats

How to: Use Configuration to Add an ASP.NET AJAX Endpoint

Creating WCF Services for ASP.NET AJAX

How to: Create an AJAX-Enabled WCF Service and an ASP.NET Client that Accesses the Service