Bom dia!
Vocês podem nos ajudar?
Estamos com o erro [A solicitação HTTP está proibida com o esquema de autenticação de cliente ‘Anonymous’].
Estamos utilizando o visual studio C# para consumir o webservice RecepcaoLoteReinf para envio da EFD-Reinf. Na chamada RecepcaoLoteReinfClient associamos o certificado reinfLote.ClientCredentials.ClientCertificate.Certificate. Veja abaixo o código.
RecepcaoLoteReinfClient reinfLote = new RecepcaoLoteReinfClient();
//preprod.ReceberLoteEventosRequest reinfReceberLote = new preprod.ReceberLoteEventosRequest();
nodeReader.MoveToContent();
ReceberLoteEventosRequest loteEventosRequest = new ReceberLoteEventosRequest();
reinfLote.ClientCredentials.ClientCertificate.Certificate = cert; // associar o certificado
XElement xElement = XElement.Load(nodeReader);
XElement xOut = reinfLote.ReceberLoteEventos(xElement);
txtRetorno.Text = xOut.ToString();
O certificado é:
X509Certificate2 cert = SelecionarCertificadoAssinaturaArquivo();
public X509Certificate2 SelecionarCertificadoAssinaturaArquivo()
{
X509Certificate2 vRetorna;
X509Certificate2 oX509Cert = new X509Certificate2();
X509Store store = new X509Store(“MY”, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(collection2, “Certificado(s) Digital(is) disponível(is)”, “Selecione o certificado digital para uso no aplicativo”, X509SelectionFlag.SingleSelection);
if (scollection.Count == 0)
{
string msgResultado = “Nenhum certificado digital foi selecionado ou o certificado selecionado está com problemas.”;
MessageBox.Show(msgResultado, “Advertência”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
vRetorna = null;
}
else
{
oX509Cert = scollection[0];
vRetorna = oX509Cert;
}
return vRetorna;
}
Bom dia,
A causa pode ser várias. Normalmente relacionado ao certificado.
Verifique se o mesmo ainda está válido (dentro da data de vigência).
Abraços,
Rafael Grether
Obrigado!
Não sei como vc está fazendo, mas eu o seguinte:
gerei as classes a partir do wsdl
a partir das classes, eu fiz:
ClasseGerada v_recepcao_lote_reinf = new ClasseGerada();
v_recepcao_lote_reinf.ClientCertificates.Add(v_certificado_digital);
v_recepcao_lote_reinf.Proxy = WebRequest.GetSystemWebProxy();
v_recepcao_lote_reinf.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
ok
Caros,
Segue solução abaixo. Espero que ajude todos que tiverem o mesmo problema.
var urlServicoEnvio = ambiente;//url do webservice
var address = new EndpointAddress(urlServicoEnvio);
var binding = new BasicHttpsBinding(); //Disponível desde .NET Framework 4.5
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
var wsClient = new WSReinfXML.RecepcaoLoteReinfClient(binding, address);
wsClient.ClientCredentials.ClientCertificate.Certificate = cert; //certificado produção ou preprod
XElement xElement = XElement.Load(nodeReader);
var retornoEnvioXElement = wsClient.ReceberLoteEventos(xElement);
txtXMLRetorno.Text = retornoEnvioXElement.ToString();//xml de retorno.
wsClient.Close();
Att.
Claudio Costa
No meu caso soh consegui fazer funcionar acrescentando mais uma linha na configuracao do binding de acordo com a documentacao da MS: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transport-security-overview
binding.Security.Mode = BasicHttpSecurityMode.Transport;
O erro pode estar relacionado a assinatura que é Sha256 e não Sha1
Obrigado Shaiene!