Предоставление доступа к службам WCF в клиентском сценарии
Обновлен: Ноябрь 2007
Windows Communication Foundation (WCF) — это универсальная модель программирования Microsoft для построения сервисноориентированных приложений. Она поддерживает AJAX ASP.NET и формат данных JSON. Модель позволяет службам WCF предоставлять функциональные возможности для веб-страниц, которые выполняют код ECMAScript (JavaScript) и, таким образом, могут обращаться к этим службам с помощью HTTP-запросов.
Если службы WCF уже созданы, можно добавить конечные точки, позволяющие сценарию на веб-страницах с включенным AJAX получить доступ к этим службам. В этом разделе описывается создание службы WCF, доступной для JavaScript, который запускается в обозревателе.
.NET Framework автоматически создает прокси-классы JavaScript для служб WCF во время загрузки страницы и загружает сценарий прокси-класса в обозревателе. Эти прокси-классы являются производными от класса Sys.Net.WebServiceProxy в Microsoft AJAX (библиотека).
Можно вызвать операцию службы WCF, вызвав соответствующий метод прокси-класса JavaScript. Дополнительные сведения см. в разделе Вызов веб-служб из клиентского сценария.
Создание службы WCF, доступной из клиентского сценария
Чтобы служба WCF была доступна из клиентского сценария, она должен удовлетворять следующим требованиям:
Служба должна размещаться в веб-приложении, содержащем файл с расширением SVC. Этот файл содержит директиву @ ServiceHost, которая указывает на службу WCF. В следующем примере иллюстрируется директива @ 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"%>
Необходимо настроить веб-приложение для поддержки вызова веб-служб из сценария. Дополнительные сведения см. в разделе Практическое руководство. Настройка служб WCF в ASP.NET AJAX.
Служба должна быть классом, реализующим интерфейс, помеченный ServiceContractAttribute. Для вызова отдельных операций службы (методов) из сценария, необходимо указать для них атрибут OperationContractAttribute.
В следующем примере показан класс, реализующий интерфейс, помеченный 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
Дополнительные сведения см. в документе Создание служб WCF для ASP.NET AJAX (на английском языке).
Использование службы WCF из клиентского сценария на веб-странице ASP.NET
Для вызова службы WCF из клиентского сценария на веб-странице ASP.NET необходимо сначала добавить элемент управления ScriptManager на страницу. Декларативно задайте объект ServiceReference, добавив дочерний элемента asp:ServiceReference к элементу управления ScriptManager и настроев его атрибут path таким образом, чтобы он указывал на службу WCF. В следующем примере проиллюстрирована ссылка на службу.
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference
Path="http://<serverhost>/SimpleService.svc"/>
</Services>
</asp:ScriptManager>
Объект ServiceReference может ссылаться на веб-службу только в том же домене. Путь веб-службы может быть относительным, относительным к приложению, относительным к домену или абсолютным. При использовании абсолютного пути следует убедиться, что он указан в том же домене.
При отображении страницы, содержащей этот элемент управления ScriptManager, для службы WCF создается прокси-класс JavaScript. Прокси-класс содержит функции, соответствующие каждой операции службы. Страница также содержит прокси-классы JavaScript, соответствующие типам данных сервера, которые используются в качестве входных параметров или возвращаемых значений методов веб-служб. Это позволяет написать клиентский сценарий, инициализирующий эти параметры, и передать их вызову метода.
См. также
Основные понятия
Использование веб-служб в технологии AJAX ASP.NET
Вызов веб-служб из клиентского сценария
Другие ресурсы
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