Disponibilizando o WSDL Out-Of-Band


Quando criamos um serviço WCF, geralmente disponibilizamos um endpoint conhecido como MEX (Metadata Exchange), que tem a responsabilidade de expor o documento WSDL, para que os clientes sejam capazes de utilizar as informações fornecidas por ele, para criar toda a estrutura necessária para efetuar a comunicação com o respectivo serviço.

Os interessados em consumir aquele serviço, podem fazer uso de ferramentas que, dado o endereço até o documento WSDL, irão gerar o proxy localmente. Quando você faz a referência através do Visual Studio .NET ou do svcutil.exe, ao colocar o endereço do serviço, ele sai em busca de um endpoint que fornece o documento WSDL. Se esse endpoint não for encontrado, ele não conseguirá extrair as informações e, consequentemente, você não conseguirá referenciar o serviço.

Publicar o WSDL através de um endpoint é bem simples, mas temos sempre que diminuir a superfície de ataque, para assim evitar problemas que possam acontecer. Uma alternativa e tema deste artigo, é distribuir o documento WSDL “out-of-band”. Com isso, podemos enviar ou disponibilizar o documento que descreve o serviço para a pessoa certa, ou invés de deixar que todos o acessem.

Para isso, uma vez que o seu serviço estiver rodando, você pode extrair os documentos que o descrevem a partir do utilitário svcutil.exe. Ele tem uma opção que permite a exportação do WSDL, salvando isso em documentos locais, para que mais tarde você envie/disponibilize para os seus clientes. Sendo assim, tudo o que precisamos fazer é utilizar a opção /t:metadata, assim como é mostrado abaixo:

C:Temp>svcutil.exe /t:metadata http://localhost:9298/

Com isso, arquivos WSDL e XSD (que descrevem os tipos utilizados pelo serviço) serão gerados localmente. Quando o cliente receber esses arquivos, ele poderá gerar o proxy a partir do mesmo utilitário, só que ao invés de passar o endereço do serviço, ele informará o caminho até os documentos WSDL/XSD que compõem toda a descrição. Para gerar o proxy, informe o local dos arquivos e a linguagem, assim como é mostrado abaixo:

C:Temp>svcutil *.wsdl *.xsd /language:C#

Depois de executar esse comando, dois arquivos serão criados, sendo um deles o proxy em si e o outro o arquivo *.config, contendo todas as configurações necessárias para efetuar a comunicação com o serviço. Feito isso, tudo o que resta fazer, é adicionar esses arquivos na aplicação que irá consumir o serviço, e como o proxy nada mais é do que uma classe local, basta instanciá-la e invocar as operações.

Anúncios

Deixe uma resposta

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

Logotipo do WordPress.com

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

Imagem do Twitter

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

Foto do Facebook

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

Foto do Google+

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

Conectando a %s