Usuário com melhor resposta
Problema ao autenticar webservice.

Pergunta
-
Estou tentando consumir um webservice feito em coldfusion que precisa de autenticação. Tenho um exemplo feito em php que funciona belezinha que segue abaixo:
<?php $sh_param = array( 'login' => 'username', 'password' => 'password'); $soapClient = new SoapClient(".../webservive.cfc?wsdl",$sh_param); ?>
O meu código c# é o seguinte:
ws.ws_autentica auth = new ws.ws_autentica(); CredentialCache myCredential = new CredentialCache(); NetworkCredential credential = new NetworkCredential("username", "password"); myCredential.Add(new Uri(auth.Url), "Basic", credential); auth.UseDefaultCredentials = false; auth.Credentials = myCredential; object xml = auth.validaUsuarioEmpresa("asdas", "adas", "adasd");
Na minha implementação em c# eu não consigo autenticar alguém tem alguma dica?
Respostas
-
Obrigado Ruth!
Consegui resolver o problema de outra forma
Fazendo uma pesquisa vi que esse modelo de autenticação é chamada de Autenticação básica e é necessário inserir o aributo Authorizarion no header da chamada SOAP. Só que o .net não estava colocando a informação no header, para resolver o problema eu sobrescrevi o método GetWebRequest do meu webservice.
Abaixo segue a alteração realizada:
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(uri);
if (PreAuthenticate)
{
NetworkCredential cred = Credentials.GetCredential(uri, "Basic");
if (cred != null)
{
Byte[] userpass = new UTF8Encoding().GetBytes(cred.UserName + ":" + cred.Password);
req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(userpass);
}
return (WebRequest)req;
}
return null;
}Dessa forma uso a minha classe que herda do meu webservice e funciona perfeitamente.
- Marcado como Resposta NatanSouza quinta-feira, 21 de julho de 2011 16:21
Todas as Respostas
-
Oi Natan, para conectar em um web service vc pode usar essa thread:
http://social.msdn.microsoft.com/Forums/pt/webservicespt/thread/40f28698-16af-42ed-ad72-fd8e991b5556
Funciona direitinho!
Espero ter ajudado
Ruth
MVP, MCTS - Biztalk Server
www.biztalkbrasil.com.br- Sugerido como Resposta Ruth Resende quarta-feira, 20 de julho de 2011 12:07
-
-
Normalmente o SoapAction esta descrito no wsdl do web service.
Procura a tag soapAction, vc deve encontrar!
Espero ter ajudado
Ruth
MVP, MCTS - Biztalk Server
www.biztalkbrasil.com.br- Sugerido como Resposta Ruth Resende quarta-feira, 20 de julho de 2011 13:23
-
Obrigado Ruth!
Consegui resolver o problema de outra forma
Fazendo uma pesquisa vi que esse modelo de autenticação é chamada de Autenticação básica e é necessário inserir o aributo Authorizarion no header da chamada SOAP. Só que o .net não estava colocando a informação no header, para resolver o problema eu sobrescrevi o método GetWebRequest do meu webservice.
Abaixo segue a alteração realizada:
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(uri);
if (PreAuthenticate)
{
NetworkCredential cred = Credentials.GetCredential(uri, "Basic");
if (cred != null)
{
Byte[] userpass = new UTF8Encoding().GetBytes(cred.UserName + ":" + cred.Password);
req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(userpass);
}
return (WebRequest)req;
}
return null;
}Dessa forma uso a minha classe que herda do meu webservice e funciona perfeitamente.
- Marcado como Resposta NatanSouza quinta-feira, 21 de julho de 2011 16:21