Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jackfaria

[Resolvido] WebService NFe

Recommended Posts

Desenvolvi um sistema que emite nfe, mas entrei num abismo no qual não consigo sair, e este abismo é o seguinte:

 

- Se e somente se, eu emitir a nota ex. de minas eu tenho o webservice de minas ok? correto até então. Mas caso eu tenha que emitir para outros estados eu terei que adicionar todos os webservices de todos os estados. Ai é que está a questão, existe uma maneira de fazer um webservice generico de recepção, mudando assim somente a url de cada um?

 

Outra coisa, ja pesquisei sobre webservice genérico, mas não consigo transferir o conceito para o WS da Sefaz.

 

Agradeço! Att, jackfaria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não precisa fazer isso não cara, não precisa adicionar os demais webservices, eu tenho uma situação parecida.

 

a única coisa é estar usando a mesma versão do webservice, pois nunca testei com versões diferentes.

 

eu me comunico com RJ e SP.

 

.........................................

 

Como eu fiz

 

Criei uma tabela dá o nome que quizer tipo URL_SERVICO

 

com os campo

 

cUF

Servico

UrlHomologacao

UrlProducao

 

cUF eu coloco o código

 

daí você faz uma consulta no banco de dados para 'pegar' a url do servico desejado, para o estado desejado

 

 

Agora digamos que você tenha posto o nome WSNfeRecepção para o serviço de recepção de notas fiscais daí você faz assim

 

          	Dim cons As New HNfeRetRecepcao.NfeRetRecepcao2
          	Dim cab As New HNfeRetRecepcao.nfeCabecMsg
         	        	Dim docEnvio As New XmlDocument
       	Dim docRet As New XmlDocument
       	Dim xmlRet As XmlElement

           	'Define parâmetros da solicitação
           	cons.Timeout = 120000
           	cons.nfeCabecMsgValue = cab
           	cons.ClientCertificates.Add(_certificado)
           	cons.Url = "urldocervico"

           	docEnvio.load ("caminho do arquivo xml que será transmitido")

           	'Faz a solicitação de consulta do recibo
           	xmlRet = cons.nfeRetRecepcao2(docEnvio)

           	'Carrega os dados de retorno no objeto
           	docRet.LoadXml(xmlRet.OuterXml)


 

Com isso você pode fazer um 'chaveamento' do webservice..

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel, bom dia!

 

Começando as explicações de cara já vejo um problema do meu em relação ao seu:

Observe:

Dim uri = "Aqui eu pego a url que me é fornecida pela sefaz de um estado"
'defino o endpointaddress com a url, pois o ws não contem a opção "ws.url"'
Dim endpoint As New ServiceModel.EndpointAddress(uri)
'Assim adiciono a URL atraves do endpoint no WS'
Dim wsa As New Recepcao.NfeRecepcao2Soap12Client(DefObjBinding, endpoint)
wsa.ClientCredentials.ClientCertificate.Certificate = DadosNfe.GetCertificado()

 

Meu Recepcao.NfeRecepcao2Soap12Client não possui as opções:

Timeout = 120000

cons.Url = "urldocervico"

 

Detalhe, este DefObjBinding é somente um objeto de conexao:

Private Function DefObjBinding() As ServiceModel.BasicHttpBinding
       Dim Binding As New ServiceModel.BasicHttpBinding()

       Binding.Security.Mode = ServiceModel.BasicHttpSecurityMode.Transport
       Binding.Security.Transport.ClientCredentialType = ServiceModel.HttpClientCredentialType.Certificate
       Binding.Security.Message.ClientCredentialType = ServiceModel.BasicHttpMessageCredentialType.Certificate
       Binding.MessageEncoding = ServiceModel.WSMessageEncoding.Text
       Binding.TextEncoding = System.Text.Encoding.UTF8
       Binding.AllowCookies = False
       Binding.MaxBufferPoolSize = CLng(ConfigurationManager.AppSettings("LengthEnviar"))
       Binding.MaxBufferSize = CInt(ConfigurationManager.AppSettings("LengthEnviar"))
       Binding.MaxReceivedMessageSize = CLng(ConfigurationManager.AppSettings("LengthReceber"))
       Binding.BypassProxyOnLocal = False
       Binding.UseDefaultWebProxy = False


       Dim ReadQuot As New System.Xml.XmlDictionaryReaderQuotas()
       ReadQuot.MaxDepth = CInt(ConfigurationManager.AppSettings("MaxDepth"))
       ReadQuot.MaxArrayLength = CInt(ConfigurationManager.AppSettings("MaxArrayLength"))
       ReadQuot.MaxBytesPerRead = CInt(ConfigurationManager.AppSettings("MaxBytesPerRead"))
       ReadQuot.MaxNameTableCharCount = CInt(ConfigurationManager.AppSettings("MaxNameTableCharCount"))
       ReadQuot.MaxStringContentLength = CInt(ConfigurationManager.AppSettings("maxStringContentLength"))

       Binding.ReaderQuotas = ReadQuot

       Dim TimeOut As New TimeSpan(0, 0, CInt(ConfigurationManager.AppSettings("TimeOut")))

       Binding.CloseTimeout = TimeOut
       Binding.OpenTimeout = TimeOut
       Binding.ReceiveTimeout = TimeOut
       Binding.SendTimeout = TimeOut

       Return Binding
   End Function

 

Assim do meu jeito, quando executo a aplicação ele gera este erro:

System.ServiceModel.FaultException: unknown

 

Obrigado pelas orientações Daniel!

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para alterar a url do webservice, faz-se necessario criar um novo endpointaddress. Sendo assim, segue o exemplo abaixo:

dim url = "url do estado"
dim ws as new WSrecepcao.RecepcaoClient
ws.endpoint.address = new endpointaddress(url)

 

Deste modo um novo endpoint é criado e setado como default em todas as outras configuraçoes, mas com url nova.

 

Qualquer duvidas sobre nota fiscal estou a disposiçao de ajudar.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jack Faria

 

Você poderia me enviar seu codigo, para que possa verificar como ficou após a conclusão, pois estou passando pelo mesmo problema na identificação do endpoint, binding e até mesmo sobre a questão do soap ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.