Autenticar webservice - horus-ws-basico

.NET

30/03/2016

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);
Fabiane

Fabiane

Curtidas 0

Melhor post

Jothaz

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.
GOSTEI 1

Mais Respostas

Fabiane

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.
GOSTEI 0
Rodolfo

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.
GOSTEI 0
Marcos Santos

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
GOSTEI 0
Daniel

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?
GOSTEI 0
Luiz Yamashita

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
GOSTEI 0
Fernando

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...
GOSTEI 0
Lucas Silva

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)
{
}
GOSTEI 0
POSTAR