Índice:


       

Objetivo:


   O objetivo deste documento é mostrar como é feito a criação de um Web Service para consultar e inserir dados em uma tabela do banco de dados e mostrar como utilizar este Web Service como conexões de Origem e Destino em um conceito.

Criação do Banco de Dados:


   Requisitos: 

  • Banco de Dados SQL
  • Visual Studio 2017

   Para este exemplo, foi criada uma tabela de produto em um banco de dados SQL para que o Web Service possa retornar todos os produtos cadastrados.

   Crie a tabela produto e insira alguns dados, como mostra o exemplo abaixo:

    CREATE TABLE produto (

      id_produto INT IDENTITY,

    nome VARCHAR (100),

      quantidade_estoque INT,

      preco DECIMAL(10,2),

      data_criacao DATETIME,

      PRIMARY KEY (id_produto)

    )

    INSERT INTO produto VALUES ('Produto 01',1,0.5,GETDATE())

    INSERT INTO produto VALUES ('Produto 01',2,1,GETDATE())

    INSERT INTO produto VALUES ('Produto 02',2,1,GETDATE());

    INSERT INTO produto VALUES ('Produto 03',3,2.5,GETDATE());

    INSERT INTO produto VALUES ('Produto 04',4,3,GETDATE());

    INSERT INTO produto VALUES ('Produto 05',5,4.5,GETDATE());

    INSERT INTO produto VALUES ('Produto 06',6,5,GETDATE());

    INSERT INTO produto VALUES ('Produto 07',7,6.5,GETDATE());

    INSERT INTO produto VALUES ('Produto 08',8,7,GETDATE());

    INSERT INTO produto VALUES ('Produto 09',9,8.5,GETDATE());

    INSERT INTO produto VALUES ('Produto 10',10,9.5,GETDATE());

    Criação do Web Service:


       A criação do Web Service é feita através do Visual Studio, o mesmo será utilizado para consumir e inserir dados na tabela criada anteriormente. 

      Abra o Visual Studio e selecione: File -> New -> Project em seguida crie um projeto do tipo "WCF Service Application" com o nome "WcfService".

      Depois de criado o projeto, um serviço é criado automaticamente com os métodos "GetData" e "GetDataUsingDataContract".

      Clique com o botão direito na Solution (WcfService) -> Add -> New Item

      Na tela "Add New Item" Selecione a opção "ADO.NET Entity Data Model" e coloque o nome de "ModelDB".


      Na tela "Entity Data Model Wizard" selecione a opção "EF Designer From database" e avance o processo.


      Na tela seguinte "Choose Your Data Connection", crie uma nova conexão apontando para sua base de dados, e dê o nome de "DBEntities" em seguida avance o processo.


      Selecione a tabela criada anteriormente e finalize a criação.


      Criação do Método:


         Depois de criado o Web Service, é necessário que seja criado um método no serviço "Service1" para retornar a lista de produtos cadastrados anteriormente. 

        Na Interface "IService1.cs" adicione os métodos "GetProdutos" e "PutProduto" na interface como mostra o exemplo abaixo:

        [OperationContract]

        List<produto> GetProdutos();

        [OperationContract]

        void PutProduto(produto Produto);

        Em seguida na classe "Service1.svc" implemente os métodos da interface, como mostra o exemplo abaixo:

        public List<produto> GetProdutos()

            {

              using (DBEntities entitie = new DBEntities())

              {

                return entitie.produto.ToList();

              }

            public void PutProduto(produto Produto)

            {

              using (DBEntities entite = new DBEntities())

              {

                entite.produto.Add(Produto);

                entite.SaveChanges();

              }

            }

        Observação:

        Observe que nas definições do objeto produto, as propriedades quantidade_estoque, preco e data_criacao são do tipo Nullable<T>, ou seja, elas permitem receber o valor nulo.

        Ao executar o projeto, a tela do "WCF Teste Client" será exibida, e os métodos criados serão visualizados.

        Para testar o método "GetProdutos", dê um duplo clique no mesmo e clique no botão "Invoke", o método será chamado e retornará a lista de produtos cadastrados no início do processo.

        Observação:

        Na lista de "My Service Projects", clique sobre o "Service1.svc" e selecione a opção "Copy Address", salve este endereço pois ele será ele utilizado na conexão com o Conceito. (No exemplo acima, o endereço copiado foi: http://localhost:52286/Service1.svc)

        Conexão de Origem:


               Após a criação do Método, crie um conceito que terá como Conexão de Origem o Web Service da lista de produtos (GetProdutos).

          Acesse o módulo Integração, abra o cadastro do Conceito e clique em Novo.

          Na tela de inclusão, preencha o campo nome com "ConceitoWebServiceOrigem"


          No menu de Conexões adicione uma Conexão de Origem do tipo "Web Service" e preencha com os seguintes dados:

          • Nome: Service1
          • Endereço WSDL: Endereço copiado anteriormente na criação do WebService (No nosso exemplo: http://localhost:52286/Service1.svc)
          • Protocolo: SOAP
          • Método: Selecione o método criado anteriormente "GetProdutos"
          • Time Out: Tempo de espera para a resposta da mensagem (Minimo: 100seg. Máximo: 5000seg)


          A conexão de Origem foi criada listando as propriedades do Objeto produto, retornado como lista no Web Service.

          Observação:

          A lista de propriedades será listada somente nos casos em que o WSDL tiver um retorno do tipo complexo (s:complexType).

          Os webservices existentes hoje no RM não possuem o WSDL do tipo complexo, ou seja, não podem ser usados dessa forma, por isso é recomendado utilizar a conexão de DataServer para usar os dados do RM.

          Observação:

          Como as propriedades quantidade_estoque, preco e data_criacao podem receber nulo, o Web Service cria sua respectiva propriedade do tipo "bool" acrescentando a palavra "Specified" para informar se o valor é nulo ou não. 


          No menu Conexões adicione uma Conexão de Destino do tipo "Arquivo Texto" e preencha com os seguintes dados:

          • Nome: ArquivoDestino
          • Arquivo: Parâmetro

          Ainda na tela de inclusão da conexão Arquivo Texto, acesse a aba "Tabelas" e adicione uma tabela com 5 colunas.

          Volte ao conceito, selecione a aba "Ligações" e realize as ligações da tabela de destino com a tabela de origem, como mostra o exemplo abaixo:

          Após salvar o Conceito, volte a tela de cadastro de conceito e execute o processo em "Processos | Processar Novo Conceito". Selecione o arquivo de destino e em seguida poderá ver o resultado no arquivo texto gerado. 

          Conexão de Destino:


                 Após a criação da Conexão de Origem, crie um conceito que terá como Conexão de Destino o Web Service para inserir um produto (PutProduto).

            Acesse o módulo Integração, abra o cadastro do Conceito e clique em Novo.

            Na tela de inclusão, Preencha o campo nome com "ConceitoWebServiceDestino"


            Crie um arquivo texto com a seguinte informação:

            • O;Produto Novo;10;10,50;18/10/2017 01:00:00

            As informações estão separadas por ; onde:

            • O: Identificador da Tabela
            • Produto Novo: Coluna Nome
            • 10: Coluna quantidade_estoque
            • 10,50: Coluna preço
            • 18/10/2017 01:00:00: Coluna data_criação

            No menu Conexões adicione uma Conexão de Origem do tipo "Arquivo Texto" e preencha com os seguintes dados:

            • Nome: Origem
            • Arquivo: Aponte para o arquivo criado anteriormente

            Ainda na tela de inclusão da conexão Arquivo Texto, acesse a aba "Tabelas" e adicione uma tabela com o identificador O (mesmo do arquivo criado anteriormente) contendo 4 colunas e preencha seus respectivos nomes e tipos.

            Agora adicione uma Conexão de Destino do tipo "Web Service" e preencha os seguintes dados:

            • Nome: DestinoService1
            • Endereço WSDL: Endereço copiado anteriormente na criação do WebService (No nosso exemplo: http://localhost:52286/Service1.svc)
            • Protocolo: SOAP
            • Time Out: Tempo de espera para a resposta da mensagem (Padrão: 100 segundos)
            • Gerar erro para os códigos das respostas HTTP (400 e 500): Por padrão somente as respostas HTTP de código 401 a 499 e 501 a 599 são gerados erros no conceito. Esta opção gera erro para as respostas do WebService de código HTTP 400 e 500 e exibe no Log a resposta que o WebService enviou. Para uma lista completa dos códigos HTTP acesse: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

            A Conexão de Destino foi criada listando o método "PutProduto" como uma tabela e listando as propriedades do objeto Produto.

            Observação:

            Como as propriedades quantidade_estoque, preco e data_criacao podem receber nulo, o Web Service cria sua respectiva propriedade do tipo "bool" acrescentando a palavra "Specified" para informar se o valor é nulo ou não.

            Selecione a aba Ligações e realize as ligações da tabela de destino com a tabela de origem.

            Observação:

            Como as colunas quantidade_estoque, preco e data_criacao podem receber nulo, temos que informar no seus respectivos campos "Specified" o valor True para que a informação seja enviada para o nosso Web Service.

            Após salvar o Conceito, volte a tela de cadastro de conceito e execute o processo em "Processos | Processar Novo Conceito". Em seguida realize a consulta na tabela no banco de dados e verifique que o produto foi inserido corretamente como mostra a imagem abaixo:

            O conceito não dá suporte a WSDLs cujas tags XML são interpretadas como arrays (ex. tag "choice"). Isso ocorre pois o conceito trabalha utilizando tabela de/para (parametrização 1 para 1). Headers de envelope SOAP também não são suportados pela ferramenta.