WCF, JSON, Dynamics CRM - Uma mistura interessante.
Autor: Ricardo Simões | Publicado: 2009-02-10T19:27:00-08:00

Olá Pessoas, Atualmente quando analiso desenvolvimentos para o MS CRM vejo uma tendência muito grande dos desenvolvedores acreditarem que XML e ASP.NET Web Services são os únicos recursos para um acesso remoto aos Serviços do CRM, quando estamos customizando um Formulário ou um botão ISV via Java Script. Contudo se analisarmos o cenário mais friamente chegaremos a conclusão de que nem XML, muito menos Web Services serão a melhor solução quando estamos pensando em ganhos de desempenho (por conta do empacotamento e envio destes formatos que causam um overhead considerável no tráfego da rede), muito menos simplicidade na arquitetura, porque certamente você precisará pensar uma camada só para tratar o retorno de chamadas que são realizadas através de Java Script, a fim de manipular os dados no formato XML, que convenhamos, dá uma baita dor de cabeça quando temos cenários mais complexos de envio e recebimento de informações. Algumas das alternativas para sanar problemas como os citados acima são o WCF e o formato JSON que, juntos, aliam ganho de performance e maior simplicidade no design na aplicação.Abaixo segue um exemplo da utilização destes dois recursos:Importante: Estou considerando neste exemplo que você já possui os conhecimentos de como criar um projeto WCF, publicá-lo para acesso através de HTTP e referenciar o SDK do Microsoft Dynamics CRM ao seu projeto.1. Definição do contrato do Serviço[ServiceContract]public interface IClienteService {[OperationContract]account Obter(Guid accountId);}2. Implementação do contratopublic class ClienteService : IClienteService {public account Obter(Guid accountId) {// return CrmService.Retrieve("account", accountId, new AllColumns());}}3. Arquivo de configuração do Serviço4. Configuração da chamada Java Scriptvar xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");// Informando o caminho do serviço e o métod que será executadovar url = http://localhost:1700/ClienteService.svc/Obter;// Configuração no formato JSONvar accountId = '{"accountId":"' + '{6f5cfcf2-ba2d-481c-bd85-5c03ba8a652d}' + '"}';xmlHttp.open("POST", url, false);xmlHttp.setRequestHeader("Content-type", "application/json; charset=utf-8");xmlHttp.setRequestHeader("Content-Length", data.length);xmlHttp.send(accountId);// Método que disparado após a execução da pesquisaxmlHttp.onreadystatechange = function() {if (xmlHttp.readyState == 4) {var account = eval('(' + xmlHttp.responseText + ')').d;alert(account.accountid.Value);alert(account.name);}}No exemplo acima estamos fazendo uma consulta a base do MS CRM utilizando como "Proxy" um serviço WCF que expõe um tipo complexo do MS CRM, sem a necessidade de se criar uma camada adicional para tratar o retorno do MS CRM para um tipo qualquer, como XML, por exemplo.Já no lado Client, fica claro que a configuração da pesquisa ficou muito mais simplificada. Além disto, devido a utilização do formato JSON podemos trabalhar com o objeto "account" da mesma forma se estivessemos manipulando este objeto no C#.Um outro aspecto importante é quanto ao desempenho desta chamada, pois não se fez necessário o empacotamento no protocolo SOAP, livrando-nos assim de uma quantidade excessiva de tags XML. Neste caso as únicas informações submetidas são o valor -- {"accountId":"{6f5cfcf2-ba2d-481c-bd85-5c03ba8a652d}"}--, que está no formato requirido pelo padrão JSON, e os valores de Content-Type e Content-Length adicionados ao Header da requisição.Como vimos com WCF e JSON podemos criar uma mistura no mínimo interessante como alternativa aos famigerados Web Services e XML no acesso as informações, via JavaScript, dentro da plataforma Dynamics CRM.[]'sRicardo Cunha