WCF REST Starter Kit


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;
    }
}

Publicidade

2 comentários sobre “WCF REST Starter Kit

    • 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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s