Silverlight 3: Отображение данных SQL Server - Добавление WCF
ОГЛАВЛЕНИЕ
Добавление WCF
После установки класса LINQ для SQL и создания класса ContactRecord пора добавить класс основы связи Windows в проект AdventureWorks_WebServer. Этот класс будет играть роль службы, использующей класс LINQ для SQL для извлечения данных из базы данных AdventureWorks и возврата их в клиентское приложение Silverlight.
В проводнике решения щелкните правой кнопкой мыши по узлу проекта AdventureWorks_WebServer и выберите “Добавить | Новый элемент…“ Щелкните по узлу Silverlight, потом выберите шаблон службы WCF с поддержкой Silverlight. Оставьте имя “Service1.svc” и нажмите кнопку “Добавить“.
Так выглядит окно добавления шаблона службы WCF:
После добавления службы WCF файл “Service1.svc” добавится в узел проекта AdventureWorks_WebServer в проводнике решения. Если он не открылся автоматически, дважды щелкните по нему, чтобы открыть окно кода.
Окно кода должно выглядеть так:
Imports System.ServiceModel
Imports System.ServiceModel.Activation
<ServiceContract(Namespace:="")> _
<AspNetCompatibilityRequirements( _
RequirementsMode:= _
AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class Service1
<OperationContract()> _
Public Sub DoWork()
' Добавить сюда реализацию операции
End Sub
' Добавить сюда больше операций и пометить их
' <OperationContract()>
End Class
Со службой будет сделана пара вещей:
• Добавить пространство имен в ServiceContract. Это обеспечит уникальность пользовательских типов.
Пространство имен должно быть URI, но не обязательно указывающее на реальное место в интернете. Оно служит лишь уникальным идентификатором для пользовательского типа.
• Удалить весь код и комментарии внутри класса.
Добавить функцию GetContacts
Надо добавить собственную функцию GetContacts(), вызываемую из клиентского приложения Silverlight. При добавлении этой функции объявите возвращаемый тип как List(Of ContactRecord) и обязательно добавьте атрибут <OperationContract()> прямо над именем функции. Это сделает данную функцию доступной для клиента Silverlight.
После добавления пространства имен и функции GetContactions() окно кода должно выглядеть так:
Imports System.ServiceModel
Imports System.ServiceModel.Activation
<ServiceContract(Namespace:="http://adventureworks.com/")> _
<AspNetCompatibilityRequirements( _
RequirementsMode:= _
AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class Service1
<OperationContract()> _
Public Function GetContacts() _
As List(Of ContactRecord)
End Function
End Class
Добавить код в функцию GetContacts
Внутри функции GetContacts() можно использовать добавленный класс LINQ для SQL “DataClasses1.dbml” и, разумеется, LINQ, для доступа к данным в таблице контактов базы данных AdventureWorks. В список добавляются первые 1000 строк, и список возвращается.
Так выглядит функция:
<OperationContract()> _
Public Function GetContacts() As List(Of ContactRecord)
'Использовать класс LINQ для SQL для доступа к
' таблице контактов в базе данных Adventure-
' Works.
Dim db As New DataClasses1DataContext()
'Использовать LINQ для извлечения строк из
' таблицы контактов.
' Метод ".Take(1000)"
' возвращает первые (верхние) 1000 строк
' из набора результатов.
Dim contacts = _
(From contact _
In db.Contacts _
Order By contact.FirstName, _
contact.LastName _
Select contact).Take(1000)
'Создать новый обобщенный список типа запись
' контакта. Этот список будет
' возвращен клиентскому приложению Silverlight
'
Dim list As New List(Of ContactRecord)
'Обойти в цикле каждую строку таблицы
'контактов и добавить ее в список.
For Each c In contacts
list.Add( _
New ContactRecord With _
{.FirstName = c.FirstName, _
.LastName = c.LastName, _
.Email = c.EmailAddress})
Next
'Вернуть список
Return list
End Function
Далее сохраните проект (Меню Файл | Сохранить все).