SeFaz Consulta Cadastro

Automação Comercial

06/11/2013

Bom dia,

Estou com um problema gigante que é o consumo do web service de Consulta de Cadastro.
Estou fazendo em C#, desenvolvendo uma DLL para consulta para poder chamar em um sistema de terceiro.

Porém estou usando SOAP 1.2 e o bidding é o customBidding.

Quando executo ocorre o seguinte problema:

System.InvalidOperationException: O nome de usuário não foi fornecido. Especifique o nome de usuário em ClientCredentials.

Alguém já passou por isso?

Josivan Laskoski

Josivan Laskoski

Curtidas 0

Melhor post

Josivan Laskoski

Josivan Laskoski

05/01/2016

Tenho um projeto no qual estou trabalhando em casa, infelizmente não sincronizei ele ainda com o servidor, mas posso ver a noite se consigo te passar.

Já tentou algo assim?

    SEUWS.ClientCredentials.UserName.UserName = "SEU_USUARIO";
    SEUWS.ClientCredentials.UserName.Password = "SUA_SENHA";


Isso tudo antes de invocar o método que executa a chamada direta do WS?
GOSTEI 1

Mais Respostas

Fabio Nascimento..

Fabio Nascimento..

06/11/2013

Você informou o certificado A1?
Há um propriedade ClientCredentials onde vc o informa.
GOSTEI 0
Victor Boechat

Victor Boechat

06/11/2013

O que fez para resolver?

Estou passando o mesmo problema e não encontro solução de jeito nenhum.
GOSTEI 0
Josivan Laskoski

Josivan Laskoski

06/11/2013

Boa tarde

Desculpe pela falta de respostas, acabei até esquecendo desse post, que ainda estava em um email antigo que não usava mais.

Basicamente fiz dessa forma que segue o codigo abaixo.

Adicionei a referencia do WS da SeFaz como uma Web References com o nome de CadConsultaWebEstados.

public class SeFazConsultaWebEstados
    {
        private CadConsultaWebEstados.CadConsultaCadastro2 cons = new CadConsultaWebEstados.CadConsultaCadastro2();
        private CadConsultaWebEstados.nfeCabecMsg cab = new CadConsultaWebEstados.nfeCabecMsg();

        [WebMethod]
        public String ConsultaCadastro(string _uf, string _versaoDados, string _ufConsulta, string _ieContribuinte, string _cnpj, string _cpf, string _caminhoCertificadoDigital, string _senhaCertificadoDigital, string _Url)
        {
            /********************* Certificado **********************************/
            X509Certificate2 certificado = new X509Certificate2(_caminhoCertificadoDigital, _senhaCertificadoDigital, X509KeyStorageFlags.PersistKeySet);
            /********************* Certificado **********************************/



            /********************* Estrutura XML Envio **********************************/
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", String.Empty));

            XmlNode nodeCab = xmlDoc.CreateNode(System.Xml.XmlNodeType.Element, "ConsCad", "");

            XmlAttribute atributoVersao = xmlDoc.CreateAttribute("versao");
            atributoVersao.Value = _versaoDados;
            nodeCab.Attributes.Append(atributoVersao);



            XmlAttribute atributoxml = xmlDoc.CreateAttribute("xmlns");
            atributoxml.Value = "http://www.portalfiscal.inf.br/nfe";
            nodeCab.Attributes.Append(atributoxml);

            xmlDoc.AppendChild(nodeCab);


            XmlNode nodeInf = xmlDoc.CreateNode(System.Xml.XmlNodeType.Element, "infCons", "");
            nodeCab.AppendChild(nodeInf);

            XmlNode userNode = xmlDoc.CreateElement("xServ");
            userNode.InnerText = "CONS-CAD";
            nodeInf.AppendChild(userNode);

            userNode = xmlDoc.CreateElement("UF");
            userNode.InnerText = _ufConsulta;
            nodeInf.AppendChild(userNode);


            if (!_ieContribuinte.Equals(""))
            {
                userNode = xmlDoc.CreateElement("IE");
                userNode.InnerText = _ieContribuinte;
                nodeInf.AppendChild(userNode);
            }


            if (!_cnpj.Equals(""))
            {
                userNode = xmlDoc.CreateElement("CNPJ");
                userNode.InnerText = _cnpj;
                nodeInf.AppendChild(userNode);
            }


            if (!_cpf.Equals(""))
            {
                userNode = xmlDoc.CreateElement("CPF");
                userNode.InnerText = _cpf;
                nodeInf.AppendChild(userNode);
            }
            /********************* Estrutura XML Envio **********************************/






            /********************* Configuracao **********************************/
            cons.Timeout = 70000;
            cons.nfeCabecMsgValue = cab;
            cons.nfeCabecMsgValue.cUF = _uf;
            cons.nfeCabecMsgValue.versaoDados = _versaoDados;
            cons.Url = _Url;
            cons.ClientCertificates.Add(certificado);

            /********************* Transforma XML em String **********************************/
            XmlDocument xmld = new XmlDocument();
            xmld.LoadXml(xmlDoc.InnerXml.ToString());
            /********************* Transforma XML em String **********************************/


            /********************* Envio e Retorno **********************************/
            XmlNode status = cons.consultaCadastro2(xmld);
            

            String sTexto = status.InnerXml;
            sTexto =  sTexto.Substring(52, sTexto.Length - 52);
            sTexto = "<infCons >" + sTexto;

            XmlTextReader reader = new XmlTextReader(new StringReader(sTexto));
            ArrayList elementos = new ArrayList();

            String sNome = "";

            while ((reader.Read()))
            {
                if (!reader.Name.Equals("")){
                    sNome = reader.Name;
                }
                
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        //Se existirem atributos
                        if (reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                //Pega o valor do atributo.
                                elementos.Add(sNome + "|");
                                elementos.Add(reader.Value + "|");
                            }
                        }
                        break;
                    case XmlNodeType.Text:
                        //Incluir o texto do elemento no ArrayList
                        elementos.Add(sNome + "|");
                        elementos.Add(reader.Value + "|");
                        break;
                }
            }


            String retorno = "";

            foreach (var num in elementos)
            {
                retorno = retorno + num;
            }

            return retorno;

        }


Espero que ajude!
GOSTEI 0
Victor Boechat

Victor Boechat

06/11/2013

Você tem algum exemplo passando usuário e senha ao invés de usar o certificado digital como autenticação?
GOSTEI 0
Josivan Laskoski

Josivan Laskoski

06/11/2013

Veja se isso te ajuda

Chamada da configuração:

var configuracao = Funcao.ConfiguracaoWebConfig(
                    "link");

                var enviaClient = new SI_ProcessaConsultaNFSync_OBClient(configuracao.binding,
                    configuracao.endPoint);
                enviaClient.ClientCredentials.UserName.UserName = usuario;
                enviaClient.ClientCredentials.UserName.Password = senha;


Função da Configuração

public static ConfiguracaoWS ConfiguracaoWebConfig(string link_endPoint)
        {
            try
            {
                var endPoint = new EndpointAddress(new Uri(link_endPoint));
                var basicHttpBinding = new BasicHttpBinding
                {
                    Name = "RequestSoap",
                    Security =
                    {
                        Mode = BasicHttpSecurityMode.TransportCredentialOnly,
                        Transport =
                        {
                            ClientCredentialType = HttpClientCredentialType.Basic,
                            ProxyCredentialType = HttpProxyCredentialType.Basic
                        },
                        Message =
                        {
                            ClientCredentialType = BasicHttpMessageCredentialType.UserName
                        }
                    },
                    ReaderQuotas =
                    {
                        MaxStringContentLength = 2147483647,
                        MaxArrayLength = 2147483647,
                        MaxBytesPerRead = 2147483647,
                        MaxDepth = 2147483647,
                        MaxNameTableCharCount = 2147483647,
                    },
                    MaxBufferPoolSize = 52428800,
                    MaxBufferSize = 65536000,
                    MaxReceivedMessageSize = 65536000
                };

                return new ConfiguracaoWS
                {
                    endPoint = endPoint,
                    binding = basicHttpBinding
                };
            }
            catch (Exception ex)
            {
                return null;
            }

        public class ConfiguracaoWS
        {
            public EndpointAddress endPoint { get; set; }
            public BasicHttpBinding binding { get; set; }
        }

GOSTEI 1
Victor Boechat

Victor Boechat

06/11/2013

Obrigado Josivan, o seu primeiro exemplo por mais simples que pareça era exatamente o que eu precisava.

Consegui informar o usuário e senha do WebService, no entanto retorna o seguinte erro:

Informações adicionais: A operação unidirecional retornou uma mensagem não nula com Ação=''.

Pensei que o problema fosse que eu estivesse informando algum atributo null ou em branco no objeto que estou enviando, no entanto não é isso. Alguém tem ideia do que seja?
GOSTEI 0
Josivan Laskoski

Josivan Laskoski

06/11/2013

Que bom que lhe ajudou!

Victor, você tem o stack trace desse erro? Já tentou usar o SoapUI para fazer testes de conexão?
GOSTEI 0
Victor Boechat

Victor Boechat

06/11/2013

Utilizei o SoapUI e está tudo ok.

Segue o StackTrace:

System.ServiceModel.ProtocolException não foi manipulada
  HResult=-2146233087
  Message=A operação unidirecional retornou uma mensagem não nula com Ação=''.
  Source=mscorlib
  StackTrace:
    Server stack trace: 
       em System.ServiceModel.Dispatcher.RequestChannelBinder.ValidateNullReply(Message message)
       em System.ServiceModel.Dispatcher.RequestChannelBinder.Send(Message message, TimeSpan timeout)
       em System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       em System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       em System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Exception rethrown at [0]: 
       em System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       em System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       em BoechatSoft.Integrador.Setores_Vendedores_Supervisores.SI_EstrutVenda_Out.OP_ReceberVendSupSet(OP_ReceberVendSupSet request)
       em BoechatSoft.Integrador.Setores_Vendedores_Supervisores.SI_EstrutVenda_OutClient.BoechatSoft.Integrador.Setores_Vendedores_Supervisores.SI_EstrutVenda_Out.OP_ReceberVendSupSet(OP_ReceberVendSupSet request) na C:\Users\Victor\Documents\Visual Studio 2015\Projects\BoechatSoft_Integrador\BoechatSoft.Integrador\Service References\Setores_Vendedores_Supervisores\Reference.cs:linha 386
       em BoechatSoft.Integrador.Setores_Vendedores_Supervisores.SI_EstrutVenda_OutClient.OP_ReceberVendSupSet(DT_SetVendSup MT_SetVendSup) na C:\Users\Victor\Documents\Visual Studio 2015\Projects\BoechatSoft_Integrador\BoechatSoft.Integrador\Service References\Setores_Vendedores_Supervisores\Reference.cs:linha 392
       em BoechatSoft.Integrador.Integracao.VendSupSet() na C:\Users\Victor\Documents\Visual Studio 2015\Projects\BoechatSoft_Integrador\BoechatSoft.Integrador\Integracao.cs:linha 111
       em BoechatSoft.Integrador.Integracao.Integrar() na C:\Users\Victor\Documents\Visual Studio 2015\Projects\BoechatSoft_Integrador\BoechatSoft.Integrador\Integracao.cs:linha 32
       em BoechatSoft.Integrador.IntegracaoFrm.button1_Click(Object sender, EventArgs e) na C:\Users\Victor\Documents\Visual Studio 2015\Projects\BoechatSoft_Integrador\BoechatSoft.Integrador\IntegracaoFrm.cs:linha 28
       em System.Windows.Forms.Control.OnClick(EventArgs e)
       em System.Windows.Forms.Button.OnClick(EventArgs e)
       em System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       em System.Windows.Forms.Control.WndProc(Message& m)
       em System.Windows.Forms.ButtonBase.WndProc(Message& m)
       em System.Windows.Forms.Button.WndProc(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       em System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       em System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       em System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.Run(Form mainForm)
       em BoechatSoft.Integrador.Program.Main() na C:\Users\Victor\Documents\Visual Studio 2015\Projects\BoechatSoft_Integrador\BoechatSoft.Integrador\Program.cs:linha 19
       em System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       em System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       em System.Threading.ThreadHelper.ThreadStart()
  InnerException:
GOSTEI 0
Josivan Laskoski

Josivan Laskoski

06/11/2013

Possivelmente isso esteja acontecendo por alguma configuração de buffer ou algo assim de seu WS.

Como voce está configurando o WS?
GOSTEI 0
Victor Boechat

Victor Boechat

06/11/2013

Consegui resolver o problema!

Gostaria de agradecer pela ajuda!

Para resolver basta alterar a propriedade IsOneWay para false, no meu caso, essa propriedade ficava na assinatura dos métodos da interface de mapeamento com classe do WebService.
GOSTEI 0
Josivan Laskoski

Josivan Laskoski

06/11/2013

Legal Victor.

Se possível vote nas respostas que te ajudaram e se puder, coloque aqui a parte do fonte que você resolveu isso.

Abraços
GOSTEI 0
Victor Boechat

Victor Boechat

06/11/2013

Desculpa não ter feito isso antes, sou novato em fóruns rs

Segue o código

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(Namespace="http://xxxxxxxxxxx.com.br/INTEGRA_REVENDAS/receberPDV", ConfigurationName="PDV.SI_PDV_Out")]
    public interface SI_PDV_Out {
        
        // CODEGEN: Gerando contrato de mensagem porque a operação OP_ReceberPDV não é RPC nem documento codificado.
        [System.ServiceModel.OperationContractAttribute(IsOneWay=false, Action="http://xxx.com/xi/WebService/soap1.1")]
        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
        void OP_ReceberPDV(BoechatSoft.Integrador.PDV.OP_ReceberPDV request);
        
        [System.ServiceModel.OperationContractAttribute(IsOneWay=false, Action="http://xxx.com/xi/WebService/soap1.1")]
        System.Threading.Tasks.Task OP_ReceberPDVAsync(BoechatSoft.Integrador.PDV.OP_ReceberPDV request);
    }


Alterei o IsOneWay de true para false
GOSTEI 0
POSTAR