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.
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.
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.
Usando Serviço Web AJAX ASP.NET
Chamando Serviços da Web de Scripts Clientes
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