Autenticar webservice - horus-ws-basico
Olá,
Estou desenvolvendo uma integração para enviar dados da farmácia municipal ao ministério da saúde.
O problema é que não sei como envio o usuário e senha.
Endereço do webservice: http://aplicacao.saude.gov.br/horus-ws-basico/RecebeDadosWS?wsdl
O retorno está sendo "Invalid user"
Veja o meu fonte:
var ws = new RecebeDadosWS();
var conDadosMun = new consultarAllDadosPorMunicipio();
conDadosMun.codigoMunicipio = "5104559";
conDadosMun.dataEnvio = "30/03/2016";
conDadosMun.nomeUsuario = "jumzanon@hotmail.com";
conDadosMun.numeroProtocolo = "123";
consultarAllDadosPorMunicipioResponse retorno = ws.consultarAllDadosPorMunicipio(conDadosMun);
MessageBox.Show(retorno.@return.horuswsmensagem.mensagemglobal);
Estou desenvolvendo uma integração para enviar dados da farmácia municipal ao ministério da saúde.
O problema é que não sei como envio o usuário e senha.
Endereço do webservice: http://aplicacao.saude.gov.br/horus-ws-basico/RecebeDadosWS?wsdl
O retorno está sendo "Invalid user"
Veja o meu fonte:
var ws = new RecebeDadosWS();
var conDadosMun = new consultarAllDadosPorMunicipio();
conDadosMun.codigoMunicipio = "5104559";
conDadosMun.dataEnvio = "30/03/2016";
conDadosMun.nomeUsuario = "jumzanon@hotmail.com";
conDadosMun.numeroProtocolo = "123";
consultarAllDadosPorMunicipioResponse retorno = ws.consultarAllDadosPorMunicipio(conDadosMun);
MessageBox.Show(retorno.@return.horuswsmensagem.mensagemglobal);
Fabiane
Curtidas 0
Melhor post
Jothaz
30/03/2016
Já tentou procurar pela documentação desta API no site do ministério da saúde?
Pois existem várias forma de fazer o que você quer e somente quem desenvolveu a API ou alguém que já usou poderá ajudá-la.
Pois existem várias forma de fazer o que você quer e somente quem desenvolveu a API ou alguém que já usou poderá ajudá-la.
GOSTEI 1
Mais Respostas
Fabiane
30/03/2016
Em primeiro lugar, obrigado por responder.
Tudo o que tem de documentação está nesse link:
http://portalsaude.saude.gov.br/index.php/o-ministerio/principal/leia-mais-o-ministerio/218-sctie-raiz/daf-raiz/ceaf-sctie/qualifarsus-raiz/eixo-informacao/l1-eixo-informacao/8508-envio-de-dados-webservice
O meu usuário foi criado e autorizado conforme a instrução do site, mas não tem um método ou instrução de como autenticar.
Tudo o que tem de documentação está nesse link:
http://portalsaude.saude.gov.br/index.php/o-ministerio/principal/leia-mais-o-ministerio/218-sctie-raiz/daf-raiz/ceaf-sctie/qualifarsus-raiz/eixo-informacao/l1-eixo-informacao/8508-envio-de-dados-webservice
O meu usuário foi criado e autorizado conforme a instrução do site, mas não tem um método ou instrução de como autenticar.
GOSTEI 0
Rodolfo
30/03/2016
Olá Fabiane!
Por acaso já fez toda integração necessária com o Hórus?
Estou tentando usar o recebeDados, mas acho q o xml não está indo, quando consulto o protocolo, me retorna que o xml é inválido.
Att.
Por acaso já fez toda integração necessária com o Hórus?
Estou tentando usar o recebeDados, mas acho q o xml não está indo, quando consulto o protocolo, me retorna que o xml é inválido.
Att.
GOSTEI 0
Marcos Santos
30/03/2016
Alguém já conseguiu resolver o problema de invalid user?
Estou tentando integrar tbm e recebo a mesma resposta, mesmo usuário estando habilitado para acessar o webservice
Estou tentando integrar tbm e recebo a mesma resposta, mesmo usuário estando habilitado para acessar o webservice
GOSTEI 0
Daniel
30/03/2016
Olá!
Alguém já está tendo sucesso na integração com web service ou dispõem de algum manual mais completo?
Alguém já está tendo sucesso na integração com web service ou dispõem de algum manual mais completo?
GOSTEI 0
Luiz Yamashita
30/03/2016
Estou com o mesmo problema, já tenho Usuário e Senha e esta Autorizado no SCPA, porem quando vou rodar o WS da a mensagem que ainda não esta Autorizado, alguém ai já passou por isso, estão conseguindo a integração sem problemas?
[]s
[]s
GOSTEI 0
Fernando
30/03/2016
Estou entrando agora pra desenvolver a integração com o horus, mas não consigo autenticar... alguém conseguiu resolver?
Estou em C#, mas qualquer ajuda é bem vinda...
Estou em C#, mas qualquer ajuda é bem vinda...
GOSTEI 0
Lucas Silva
30/03/2016
Pessoal,
Consegui resolver através desse link: https://blogs.msdn.microsoft.com/mohamedg/2012/12/13/adding-http-headers-to-wcf-calls/
Meu código:
public class ClientMessageInspector : IClientMessageInspector
{
public ClientMessageInspector()
{
throw new NotImplementedException();
}
public ClientMessageInspector(string userAuthentication, string passwordAuthentication)
{
this.authorization = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(string.Format(":", userAuthentication, passwordAuthentication)));
}
private string authorization;
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
if (!string.IsNullOrEmpty(this.authorization))
{
if (request.Properties.Count == 0 || request.Properties[HttpRequestMessageProperty.Name] == null)
{
var property = new HttpRequestMessageProperty();
property.Headers["Authorization"] = this.authorization;
request.Properties.Add(HttpRequestMessageProperty.Name, property);
}
else
{
((HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name]).Headers["Authorization"] = this.authorization;
}
}
return null;
}
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
throw new NotImplementedException();
}
}
public class CustomEndpointBehavior : IEndpointBehavior
{
private string userAuthentication;
private string passwordAuthentication;
public CustomEndpointBehavior()
{
throw new NotImplementedException();
}
public CustomEndpointBehavior(string userAuthentication, string passwordAuthentication)
{
this.userAuthentication = userAuthentication;
this.passwordAuthentication = passwordAuthentication;
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.ClientMessageInspectors.Add(new ClientMessageInspector(this.userAuthentication, this.passwordAuthentication));
}
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
// Nothing special here
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
// Nothing special here
}
public void Validate(ServiceEndpoint endpoint)
{
// Nothing special here
}
}
Na chamada para fazer autenticação:
WS_HORUS_HM.HorusWSAsyncClient soapTransmissaoDadosDispensacao = new WS_HORUS_HM.HorusWSAsyncClient();
soapTransmissaoDadosDispensacao.Endpoint.Behaviors.Add(new CustomEndpointBehavior(usuario, senha));
try
{
//Para enviar as informações para o WebService
WS_HORUS_HM.ProtocoloType protocoloResultado = soapTransmissaoDadosDispensacao.informarDispensacaoMedicamentoEmLote(informarDispensacaoMedicamentoEmLote);
//Para consultar as inconsistências
WS_HORUS_HM.InconsistenciaProcessamentoLoteType inconsistencias = soapTransmissaoDadosDispensacao.consultarInconsistencias(protocoloResultado);
if (inconsistencias != null)
{
foreach (WS_HORUS_HM.InconsistenciaProcessamentoLoteTypeInconsistencias inconsistencia in inconsistencias.inconsistencias)
{
}
}
}
catch(FaultException ex)
{
}
Consegui resolver através desse link: https://blogs.msdn.microsoft.com/mohamedg/2012/12/13/adding-http-headers-to-wcf-calls/
Meu código:
public class ClientMessageInspector : IClientMessageInspector
{
public ClientMessageInspector()
{
throw new NotImplementedException();
}
public ClientMessageInspector(string userAuthentication, string passwordAuthentication)
{
this.authorization = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(string.Format(":", userAuthentication, passwordAuthentication)));
}
private string authorization;
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
if (!string.IsNullOrEmpty(this.authorization))
{
if (request.Properties.Count == 0 || request.Properties[HttpRequestMessageProperty.Name] == null)
{
var property = new HttpRequestMessageProperty();
property.Headers["Authorization"] = this.authorization;
request.Properties.Add(HttpRequestMessageProperty.Name, property);
}
else
{
((HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name]).Headers["Authorization"] = this.authorization;
}
}
return null;
}
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
throw new NotImplementedException();
}
}
public class CustomEndpointBehavior : IEndpointBehavior
{
private string userAuthentication;
private string passwordAuthentication;
public CustomEndpointBehavior()
{
throw new NotImplementedException();
}
public CustomEndpointBehavior(string userAuthentication, string passwordAuthentication)
{
this.userAuthentication = userAuthentication;
this.passwordAuthentication = passwordAuthentication;
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.ClientMessageInspectors.Add(new ClientMessageInspector(this.userAuthentication, this.passwordAuthentication));
}
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
// Nothing special here
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
// Nothing special here
}
public void Validate(ServiceEndpoint endpoint)
{
// Nothing special here
}
}
Na chamada para fazer autenticação:
WS_HORUS_HM.HorusWSAsyncClient soapTransmissaoDadosDispensacao = new WS_HORUS_HM.HorusWSAsyncClient();
soapTransmissaoDadosDispensacao.Endpoint.Behaviors.Add(new CustomEndpointBehavior(usuario, senha));
try
{
//Para enviar as informações para o WebService
WS_HORUS_HM.ProtocoloType protocoloResultado = soapTransmissaoDadosDispensacao.informarDispensacaoMedicamentoEmLote(informarDispensacaoMedicamentoEmLote);
//Para consultar as inconsistências
WS_HORUS_HM.InconsistenciaProcessamentoLoteType inconsistencias = soapTransmissaoDadosDispensacao.consultarInconsistencias(protocoloResultado);
if (inconsistencias != null)
{
foreach (WS_HORUS_HM.InconsistenciaProcessamentoLoteTypeInconsistencias inconsistencia in inconsistencias.inconsistencias)
{
}
}
}
catch(FaultException ex)
{
}
GOSTEI 0