В этом посте мы создадим службу WCF REST и разместим ее в Windows Azure. Мы изучим следующие аспекты развития задачи:
- Работа с веб-ролями WCF
- Включение REST для веб-ролей WCF
- Возврат данных XML и JSON из службы REST
- Развертывание веб-ролей службы WCF в Windows Azure
Прежде всего, создайте проект в Visual Studio, выбрав веб-роль службы WCF на вкладке «Облако».
Мы собираемся вернуть список игроков Сервиса в формате XML и JSON. Для этого добавьте в проект класс с именем Players и присвойте ему атрибут DataContract . Ниже я создаю класс Players и приписываю ему класс DataContract, а все свойства — DataMember .
[DataContract] public class Players { [DataMember] public string Name { get; set; } [DataMember] public string Sports { get; set; } [DataMember] public string Country { get; set; } [DataMember] public string ImageUrl { get; set; } }
После создания DataContract нам нужно создать ServiceContract. Я создаю ServiceContract с двумя OperationContracts. Один OperationContract переустанавливает XML, а другой возвращает JSON. ServiceContract приведен ниже,
IService1.cs
[ServiceContract] public interface IService1 { [WebGet(UriTemplate="/GetPlayersXml", RequestFormat=WebMessageFormat.Xml, ResponseFormat=WebMessageFormat.Xml, BodyStyle= WebMessageBodyStyle.Bare)] List<Players> GetPlayersXml(); [WebGet(UriTemplate = "/GetPlayersJson", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] List<Players> GetPlayersJson(); }
- Есть два договора на эксплуатацию.
- Функция GetPlayersXml будет возвращать XML в качестве ответа.
- Функция GetPlayersJson будет возвращать JSON в качестве ответа.
- Использование атрибута WebGet Поведение REST было включено в операционные контракты.
- Мы можем получить проигрыватели в виде XML в базовом адресе Uri / Service1.svc / GetPlayersXml и в виде JSON в базовом адресе Uri / Service1.svc / GetPlayersJson
Мы создали DataContract и определили ServiceContract. Далее нам нужно реализовать сервис. При реализации я возвращаю жестко закодированные данные, однако вы также можете возвращать данные из SQL Azure или Azure Storage. Сервис реализован как ниже,
Service1.svc.cs
public class Service1 : IService1 { public List<Players> GetPlayersXml() { return GetPlayers(); } public List<Players> GetPlayersJson() { return GetPlayers(); } private List<Players> GetPlayers() { List<Players> Players = new List<Players> { new Players { Country ="India", Name="Sachin Tendulkar",Sports ="Cricket", ImageUrl="sachin.jpg" }, new Players { Country ="India", Name="MS Dhoni",Sports ="Cricket", ImageUrl="dhoni.jpg" }, new Players { Country ="Australia", Name="Rickey Ponting",Sports ="Cricket", ImageUrl="rickey.jpg" }, new Players { Country ="India", Name="Sandeep Singh",Sports ="Hockey", ImageUrl="sandeep.jpg" }, }; return Players; } }
В реализации сервиса я создал функцию с именем GetPlayers (). Эта функция возвращает список игроков и вызывает одну и ту же функцию в функциях GetPlayerXml и GetPlayerJson.
Последний шаг, который мы должны выполнить, — включить REST EndPoint в сервисе. Для этого нам нужно настроить поведение EndPoint, как показано ниже,
А затем нам нужно создать EndPoint с WebHttpBinding, чтобы включить REST в службе WCF. Конечная точка будет как ниже,
В контракте PlayerData — это пространство имен, а IService1 — это ServiceContract, который мы создали на предыдущем шаге. Наконец, конфигурация будет такой, как показано ниже,
<system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="servicebehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="restbehavior"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <services> <service name ="PlayerData.Service1" behaviorConfiguration ="servicebehavior" > <endpoint name ="RESTEndPoint" contract ="PlayerData.IService1" binding ="webHttpBinding" address ="" behaviorConfiguration ="restbehavior"/> </service> </services> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel>
Это все, что нам нужно сделать, чтобы создать службу WCF REST для размещения в Windows Azure. Нажмите клавишу F5, чтобы запустить и протестировать веб-роль службы WCF в локальной структуре разработки. Убедитесь, что вы установили проект Windows Azure в качестве запускаемого проекта.
При запуске вы можете увидеть вывод в браузере, как показано ниже. Я вызываю функцию GetPlayerXml
Вы можете видеть, что данные Players в виде XML доступны по адресу baseaddress / Service1.svc / GetPlayersXml. Поскольку в настоящее время мы запускаем веб-роль службы WCF в локальном эмуляторе Azure, поэтому базовым адресом является IP-адрес localhost на порту 81.
Далее после локального тестирования вы можете развернуть службу в Windows Azure. Для этого щелкните правой кнопкой мыши на проекте Windows Azure и выберите Package. Затем выберите «Конфигурация службы в качестве облака» и «Конфигурация сборки» в качестве выпуска и нажмите «Пакет».
После успешного завершения пакета вы можете увидеть файл пакета службы и файл конфигурации облачной службы в обозревателе папок. Нам нужно загрузить эти два файла, чтобы развернуть приложение в Microsoft Data Center. А затем загрузите этот пакет в размещенную службу Windows Azure, чтобы разместить созданную веб-роль службы WCF в Windows Azure.
По-другому опубликовать см. Этот пост, написанный мной для публикации из Visual Studio
Таким образом, вы можете создать Службу REST WCF и разместить ее в Windows Azure. Надеюсь этот пост полезен. Спасибо за чтение.