Средства Windows Phone для работы с сетью
17.6. Взаимодействие приложений с сетевыми службами
Приложения для Windows Phone могут взаимодействовать с веб-серверами, используя протоколы Интернета. Также можно создавать сетевые службы и использовать их в устройствах Windows Phone.
Службы Windows Communication Foundation, или WCF, предоставляют возможность процессам взаимодействовать друг с другом по сети. Процессы могут обмениваться сообщениями по сети, используя различные сетевые среды. Службы работают на сервере, к которому могут получать доступ клиентские программы. В нашем случае клиентская программа будет работать в Windows Phone.
На рис. 17.4 представлен принцип взаимодействия программы с сетевой службой. Программное обеспечение телефона взаимодействует с прокси-объектом, который содержит методы, предоставляемые службой. Вызов метода прокси-объекта приводит к созданию и оправке сетевого сообщения службе на сервере. При получении сообщения сервер вызывает код метода серверного объекта. Результат, возвращаемый методом, упаковывается в другое сетевое сообщение, которое отправляется клиенту, который пересылает возвращаемое значение программе, которая вызвала этот метод. При этом, система выполняет всю работу по созданию и передаче сообщений. Необходимо только создать серверные методы и вызывать их на клиентской системе.
Также служба предоставляет описание её методов. Это описание использует среда разработки (в нашем случае — Visual Studio) для создания прокси-объекта в клиентской программе. Это упрощает создание клиентского приложения.
Рассмотрим пример создания службы Новость дня, которая будет возвращать одну из новостей по запросу клиента. Клиент должен передать в качестве параметра цифру 1, 2 или 3, которая, для удобства, будет обозначать категорию новостей.
Приложение будет состоять из двух частей: программа на сервере, которая экспортирует службу, и программа на клиенте, которая её использует. Сервер будет службой WCF, а клиент — приложением для Windows Phone, которое подключается к службе и запрашивает новость.
Для создания службы WCF нужно при создании проекта Visual Studio выбрать шаблон Приложение службы WCF в группе WCF. Службу можно тестировать в среде Visual Studio. После тестирования файлы проекта можно будет загрузить на рабочий сервер. Обратите внимание, что службу можно создать в Visual Web Developer 2010 Express.
Службы и клиенты
Службы и клиенты похожи на методы. При создании сервера создаётся метод, который выполняет какие-то действия и возвращает результат. Клиента вызывает метод сервера и обрабатывает результат. При этом, служба WCF выполняет все необходимые действия по упаковке параметров и возвращаемого значения метода в сетевые сообщения. При создании проекта службы в файле .cs создаётся интерфейс, который определяет предоставляемый службой метод:
[ServiceContract] public interface INewsOfTheDayService { [OperationContract] string GetData(int value); }
В общем случае, служба может предоставить несколько методов, но в нашем примере достаточно одного метода. Этот метод принимает один параметр и возвращает результат. Также при создании службы будут автоматически созданы метод GetDataUsingDataContract и класс CompositeType, которые являются примерами использования сложных типов данных в службах, и их можно удалить.
После создания интерфейса можно создать код метода, который будет предоставлять служба. Заготовка метода создаётся по умолчанию в файле службы с расширением .svc, с которым связан одноимённый файл .cs. Атрибуты [ServiceContract] и [OperationContract] предоставляют средства для создания описания службы при построении проекта, которые будут использоваться клиентами для взаимодействия с этими службами.
public class NewsOfTheDayService : INewsOfTheDayService { public string GetData(int value) { string result; switch (value) { // категория "Компьютеры" case 1: result = "Intel Xeon E5-2600: "облачные" процессоры ставят рекорды"; break; // категория "Программное обеспечение" case 2: result = "Вышла в свет ОС Windows 8 Consumer Preview"; break; // категория "Мобильные устройства" case 3: result = "Nokia выпускает новые телефоны с ОС Windows Phone 7.5 Mango"; break; // если указан неверный номер категории default: result = "Выбрана несуществующая категория"; break; } return result; } }
Этот метод возвращает строку с новостью в соответствии с запрошенной категорией. Если будет передан номер несуществующей категории, будет выдано сообщение об ошибке.
Если попытаться запустить проект, нажав клавишу F5 (или другим способом), Visual Studio создаст веб-сервер, на котором будет запущена служба, и откроется окно программы Тестовый клиент WCF, в котором можно вызвать метод службы с различными параметрами и просмотреть результаты, которые метод возвращает (рис. 17.5).
Также можно просмотреть описание службы в браузере, указав URL службы, который можно найти в окне программы Тестовый клиент WCF (рис. 17.6).
В окне браузера выводится ссылка на описание службы на языке WSDL и программный код, который можно использовать для создания приложения для тестирования службы.