Há algum tempo eu escrevi sobre a possibilidade de criar serviços REST em WCF. Visando incrementar esses tipos de serviços, a Microsoft disponibilizou recentemente o Windows Communication Foundation REST Stater Kit. Este kit fornece templates de projeto e diversas funcionalidades para serviços REST criados sob WCF. As funcionalidades fornecidas pelo kit facilita o uso do protocolo HTTP dentro do serviço e encapsula algumas funcionalidades expostas pelo ASP.NET. Entre as principais funcionalidades, temos caching, tratamento/manipulador de erros, página de suporte, estensibilidade, etc.
Todas as funcionalidades estão contidas no assembly Microsoft.ServiceModel.Web.dll. O caching funciona de forma muito parecida com o caching do ASP.NET/ASP.NET Web Services, pois foi criado um atributo chamado WebCacheAttribute que, podemos aplicar em algum método de nosso serviço. Exemplo:
[WebGet(UriTemplate = “”)]
[WebCache(Duration = 30)]
[OperationContract]
string RecuperarAlgumaInformacao();
Outra possibilidade que temos, é a criação de uma página de suporte, que traz informações relacionadas aos métodos que o serviço disponibiliza. Para acessá-la, basta colocar “/help” no final da URL do serviço que, automaticamente, uma “página amigável” será exibida com essas informações. Vale lembrar que voce poderá customizar a descrição de um determinado método, através do atributo WebHelpAttribute, como é mostrado abaixo:
[WebGet(UriTemplate = “”)]
[WebHelp(Comment = “Retorna uma informação qualquer.”)]
[OperationContract]
string RecuperarAlgumaInformacao();
Alguns novos tipos também foram estendidos para suportar essas novas funcionalidades. Entre esses tipos, temos as classes WebServiceHost2, WebServiceHost2Factory e WebHttpBehavior2. Esses tipos são semelhantes aos existentes no .NET Framework 3.5, mais precisamente, dentro do Assembly System.ServiceModel.Web.dll. O WebServiceHost2 possui uma propriedade chamada Interceptors que, como o próprio nome diz, permite-nos acoplar um “interceptador” e colocar ali algum código que desejamos executar durante a requisição. Para criar um interceptador, tudo o que precisamos fazer é herdar da classe abstrata RequestInterceptor e sobrescrever o método ProcessRequest, como é mostrado abaixo:
public class MeuInterceptador : RequestInterceptor
{
public MeuInterceptador() : base(true) { }
public override void ProcessRequest(ref RequestContext requestContext)
{
Message msg = requestContext.RequestMessage;
//faz algo customizado aqui
}
}
E, depois de criado, precisamos adicioná-lo na coleção de interceptors do WebServiceHost2, o que nos obriga a criar uma service factory customizada (atente-se a sua configuração), conforme é mostrado abaixo:
internal class AppServiceHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
WebServiceHost2 w = new WebServiceHost2(serviceType, true, baseAddresses);
w.Interceptors.Add(new MeuInterceptador());
return w;
}
}
Boas Lobo,
Qual tipo de documentação? Aqueles referentes aos métodos? WSDL?
Israel, como faço pra criar uma service Help Page sem usar o REST start kit? Ou seja para meus antigos serviços WCF. Estou usando NDOC, mas queria usar uma página da mesma forma que com o REST.