Теперь, когда вы знакомы со стандартным шаблоном проекта сервиса WCF, пришло время изучить создание сервиса WCF при помощи Visual Studio 2008.
Для примера разработаем WCF-версию сервиса CustomerProfile, который мы уже создали ранее в разделе Web-сервисов. Подобно тому сервису, данный сервис будет обращаться к объекту Customer, описанному в библиотеке BusinessEntities (см. листинг 19.1), а также коду реализации EntityServices (см. листинг 19.2). В последнем имеются методы для получения информации
0 клиенте из хранилища данных и для сохранения изменений этой информации. Вот те шаги, которые необходимо сделать для того, чтобы реализовать такую функциональность в виде сервиса WCF:
1. Начните с создания нового проекта WCF Service Library. Назовите сервис CustomerProfileService (а его интерфейс — ICustomerProf ileService).
2. Добавьте ссылки на библиотеки классов EntityServices и BusinessEntities (из предыдущего примера для Web-сервиса).
3. Откройте файл ICustomerProfileService. Удалите из файла образцовый код и добавьте вместо него описания методов GetCustomerProf ile, SaveCustomer и DeleteCustomer. Каждое описание метода должно быть помечено атрибутом [OperationContract]. Ваш код должен быть похож на листинг 19.9.
ICusfconwarBrofileSarvic©
using System;
using System.Collections.Generic; using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel; using System.Text; using BusinessEntities;
namespace WcfCustomerProfile {
[ServiceContract]
public interface ICustomerProfileService {
[OperationContract]
Customer GetCustomerProfile(string customerld);
[OperationContract]
void DeleteCustomer(string customerld);
[OperationContract]
void SaveCustomer(Customer customer);
}
}
4. Затем откройте файл класса CustomerProfileService.es. Здесь вы будете реализовывать код интерфейса, описанного на предыдущем шаге. Для начала выделите реализацию ин-
терфейса iCustomerProfileService на уровне класса. Вы должны увидеть маленький смарт-тег. Щелкните по нему и выберите пункт Implement Interface 'ICustomerProfileService1. Это создаст заглушки для методов вашего сервиса. Затем добавьте код, аналогичный листингу 19.10.
using System;
using System.Collections.Generic; using System.Linq;
using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using BusinessEntities;
namespace WcfCustomerProfile {
public class CustomerProfileService : ICustomerProfileService {
public Customer GetCustomerProfile(string customerld) { EntityServices.CustomerProfile custProfile =
new EntityServices.CustomerProfile(); return custProfile.GetCustomer(customerld);
}
public void DeleteCustomer(string customerld) {
EntityServices.CustomerProfile custProfile = new
EntityServices.CustomerProfile(); custProfile.DeleteCustomer(customerld);
}
*
public void SaveCustomer(Customer customer) {
EntityServices.CustomerProfile custProfile =
new EntityServices.CustomerProfile(); custProfile.SaveCustomer(customer);
}
5. Последний шаг — обозначить созданный вами в первом примере объект Customer как сериализуемый. Этот класс находился внутри библиотеки BusinessEntities. После этого WCF будет знать, что она может сериализовать данные внутри класса для передачи между клиентом и сервисом. Для этого используйте атрибуты DataContract пространства имен System. Runtime. Serialization (вам может понадобиться добавить ссылку на это пространство имен). Пометьте класс как DataContract, а каждое свойство— как DataMember. Код показан в листинге 19.11.
using System;
using System.Runtime.Serialization;
namespace BusinessEntities {
[DataContract] public class Customer {
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public string AddressLinel { get; set; }
[DataMember]
public string AddressLine2 { get; set; }
[DataMember]
public string City { get; set; }
[DataMember]
public string State { get; set; }
[DataMember]
public string PostalCode { get; set; }
[DataMember]
public string Phone { get; set; }
[DataMember]
public bool ContactEmail { get; set; } [DataMember]
public bool ContactPhone { get; set; }
}
}
Вот и все. Теперь у вас есть простой сервис WCF, для которого вы можете настроить конкретные конечные точки (для работы с различными вызывающими клиентами). Теперь мы посмотрим, как использовать Visual Studio для тестирования сервиса WCF.