Статьи

Как создать службу WCF REST и разместить ее в Azure

В этом посте мы создадим службу 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. Надеюсь этот пост полезен. Спасибо за чтение.