Sunday, March 13, 2011

Вызов .NET сервиса (WCF RESTful) из Android приложения

Вот недавно столкнулся с проблемой, нужно было вызвать .NET WCF сервис из Javа. Нашел несколько примеров, реализации, одним из них и хочу поделиться, вдруг пригодиться кому. Прогулявшись по просторам интернета, нашел готовое решение для SOAP сервисов. Разбираться с ним не стал и продолжил поиск. Затем, было найдено решение с использованием WCF RESTful сервиса, который возвращал данные в формате JSON. Решил разобраться подробнее и попробовать как это работает.
Итак, для начала нам надо написать WCF RESTful [EN] сервис. Для начала определим дата-контракт:

Message.cs

using System.Runtime.Serialization;
namespace TestService
{
[DataContract]
public class Message
{
[DataMember(Order = 1)]
public string Header { get; set; }
[DataMember(Order =2)]
public string Body { get; set; }
}
}

Задаем порядок элементов, которые будет возвращать веб-сервис посредством Order = x.
Потом определим сервис-контракт:

ITestService.cs

using System.ServiceModel;
using System.ServiceModel.Web;
namespace TestService
{
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebGet(UriTemplate = "/GetMessage/?header={header}&?body={body}", ResponseFormat = WebMessageFormat.Json)]
Message ComposeMessage(string header, string body);
}
}

Подробнее о UriTemplate можете почитать тут.

Реализуем сервис:

TestService.svc.cs

using System.ServiceModel.Activation;
namespace TestService
{
public class TestService : ITestService
{
#region ITestService Members
public Message ComposeMessage(string header, string body)
{
Message message = new Message() { Header = header, Body = body };
return message;
}