wsbndaf / Webservice

Webservice da Base Nacional de Dados, Ações e Serviços da Assistência Farmacêutica
http://portalms.saude.gov.br/assistencia-farmaceutica/base-nacional-de-dados/sistemas/web-service?view=default
32 stars 27 forks source link

INFORMAR HEADER PARA O WEB SERVICE EM C# #10

Open LucasRocha8 opened 6 years ago

LucasRocha8 commented 6 years ago

Boa tarde!

Temos um software de Gestão em Saúde, e estamos fazendo a integração também. Estou aqui para pedir ajuda de vocês, pois estamos desenvolvendo em C#, e gostaria de saber se vocês sabem como consigo informar o HEADER, ou o usuário e senha para o Web Service. Estamos em cima do prazo, e até agora não conseguimos.

Desde já, muito obrigado a todos, Abraço!

datorre commented 6 years ago

Já que o governo não faz sua parte (disponibilizar documentação correta e completa), segue um post que fiz justamente sobre o assunto, consumindo o WebService e informando/consultando dados.

Espero que possa ajudar alguém.

Abraços.

http://fdatorre.blogspot.com.br/2018/03/integrando-web-service-do-sistema-horus.html

wsbndaf commented 6 years ago

Prezado datorre;

Ficamos muito felizes por sua contribuição à comunidade.

É importante ressaltar que a ideia de criar um Git para o projeto é exatamente permitir que a comunidade possa propor melhorias na documentação e apoiar o processo de desenvolvimento dos muitos desenvolvedores que estão trabalhando nesta integração. Devemos entender que mesmo webservices bem conhecidos e amplamente utilizados como o SIGEP dos correios possuem número limitado de exemplos de como consumir o serviço, entretanto, é possível encontrar muitas dicas pela rede.

Assim, para além do simples processo de desenvolvimento, ressaltamos a relevância desse projeto para o SUS, que possibilitará uma aplicação mais efetiva dos recursos da Assistência Farmacêutica bem como garantir o acesso da população a medicamentos seguros, efetivos e eficazes.

Um abraço e aguardamos contribuições para a melhoria da documentação.

Atenciosamente;

COORDENAÇÃO GERAL DE MONITORAMENTO DAS POLÍTICAS DE ASSISTÊNCIA FARMACÊUTICA E DE MEDICAMENTOS - CGMPAF Departamento de Assistência Farmacêutica e Insumos Estratégicos – DAF Secretaria de Ciência, Tecnologia e Insumos Estratégicos - SCTIE Ministério da Saúde - MS

rodolfomuller commented 6 years ago

Olá!

Alguém sabe recuperar o xml gerado em C#? Pois acredito que temos que manter um histórico do que é enviado, então terá que ser o xml.

rodolfomuller commented 6 years ago

Alguém fazendo ou já fez a integração utilizando o C#?

LucasRocha8 commented 6 years ago

Já realizei a integração em VB.NET, serve?


De: RodolfoM notifications@github.com Enviado: quinta-feira, 25 de outubro de 2018 15:35 Para: wsbndaf/Webservice Cc: LucasRocha8; Author Assunto: Re: [wsbndaf/Webservice] INFORMAR HEADER PARA O WEB SERVICE EM C# (#10)

Alguém fazendo ou já fez a integração utilizando o C#?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/wsbndaf/Webservice/issues/10#issuecomment-433098979, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AjrVVC58CLLkrYk3DLPyS2-n2nGTqun2ks5uodpAgaJpZM4SuNvk.

rodolfomuller commented 6 years ago

E ai @LucasRocha8!

Puxa, eu não vejo a hora de acabar isso...rs Como você fez? Usou o WSDL, jogou as informações nos objetos e enviou, está armazenando o xml enviado? (Que ainda são sei se é possível resgatar o xml antes de enviar as informações.) Estou fazendo dessa forma, ainda é somente um teste.

`

var usuario = "email@email.com";

var senha = "senhadomunicipio";

var combinados = String.Format("{0}:{1}", usuario, senha);

var plainTextBytes = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(combinados);

var resultante = Convert.ToBase64String(plainTextBytes);

var autorizacao = "Basic " + resultante;

var client = new HorusWSAsyncClient();

//fazer o select do ERP

using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
{
    //cabeçalho
    var httpRequestProperty = new HttpRequestMessageProperty();
    httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = autorizacao;
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

    int cont = 0;                    
    IdentificacaoType id = new IdentificacaoType();
    id.coIBGE = "12345678";
    id.idOrigem = IdentificacaoTypeIdOrigem.M;

    // foreach (InformarEntradaMedicamentoEmLoteType obj in lstEntrada) /// repetição dos produtos
    // {
    EstabelecimentoType estab = new EstabelecimentoType();
    estab.coCNES = "2379244";
    estab.coTipoEstabelecimento = EstabelecimentoTypeCoTipoEstabelecimento.A;

    ProdutoEntradaType prod = new ProdutoEntradaType();
    prod.coIUM = "";
    prod.coRegistroOrigem = "123456";
    prod.dtRegistro = "10-10-2018";
    prod.dtValidade = "10-10-2020";
    prod.noFabricanteInternacional = "";
    prod.nuCNPJDistribuidor = "00530493000171";
    prod.nuCNPJFabricante = "00530493000171";
    prod.nuLote = "Lote123";
    prod.nuNotaFiscal = "123456";
    prod.nuProduto = "OBR0266630U0122";
    prod.nuValorUnitario = 123456;
    prod.qtProduto = "12";
    prod.sgProgramaSaude = "";
    prod.tpEntradaEstoque = "E-O";

    InformarEntradaMedicamentoEmLoteTypeRegistro reg = new InformarEntradaMedicamentoEmLoteTypeRegistro();
    reg.estabelecimento = estab;
    reg.produto = prod;

    InformarEntradaMedicamentoEmLoteTypeRegistro[] arrayReg = new InformarEntradaMedicamentoEmLoteTypeRegistro[1];

    arrayReg[cont] = reg;
    //cont++;
    // }
    InformarEntradaMedicamentoEmLoteType loteReg = new InformarEntradaMedicamentoEmLoteType();
    loteReg.identificacao = id;
    loteReg.registro = arrayReg;

    respostaProtocolo resposta = await client.informarEntradaMedicamentoEmLoteAsync(loteReg);

}`

mateusrcaetano commented 6 years ago

Bom dia @rodolfomuller !

Não sei se no C# tem algo parecido, mas no Delphi e C++ Builder, tem um componente THTTPRIO.

Esse componente que faz a transmissão, e nele tem os métodos BeforeExecute e AfterExecute.

Nesses eventos dá pra pegar o XML que ele gera e o que retorna.

E dentro do HTTPRIO tem o HTTPWebNode, em que você pode adicionar o usuário e senha encriptado em base64.

Provavelmente deve haver algum componente similar em C#.

Espero ter ajudado.

Abraço!

rodolfomuller commented 6 years ago

Olá @mateusrcaetano!

É exatamente isso que eu precisaria, pois no C# não estou achando um jeito, achei algumas coisas mas muito mirabolantes, quero simplificar e não complicar, mas vamos lá....