Suporte ao protocolo UDP

Continuando minhas deambulações com o Visual Studio .NET 2010, notei que a Microsoft incorporou ao .NET Framework 4.0 novos tipos para suportar o protocolo UDP no WCF. Similiar ao TCP, pelo fato de enviar e receber pacotes na rede, possui algumas diferenças consideráveis, como o fato de não manter conexão ativa entre as duas extremidades, sessões e garantia de entrega (não existe o conceito de acks no UDP).

Justamente por não ter todo o handshake e o overhead que existe para suportar as funcionalidades que falamos acima, o protocolo UDP possui uma performance bem melhor em relação ao TCP. Na versão atual, não há um binding exclusivo para este protocolo e, para fazer o uso dele, é necessário recorrer a um binding customizado, configurando-o com a codificação binary e utilizando o meio de transporte UDP, sempre através de elementos de binding. Além disso, ainda há um novo schema: soap.udp. O código abaixo ilustra a sua utilização:

Uri address = new Uri(“soap.udp://localhost:8383”);
CustomBinding cb =
    new CustomBinding(
        new BindingElement[] { 
            new BinaryMessageEncodingBindingElement(), 
            new UdpTransportBindingElement()});

using (ServiceHost host = new ServiceHost(typeof(Servico), new Uri[] { address }))
{
    host.AddServiceEndpoint(typeof(IContrato), cb, “srv”);
    host.Open();

    ((UdpTransportBindingElement)cb.Elements[0]).ManualAddressing = false;

    using (ChannelFactory<IContrato> f = 
        new ChannelFactory<IContrato>(cb, new EndpointAddress(address)))
    {
        f.CreateChannel().Ping();
    }
}

Publicidade