WEB SEVICE EM C#
Ola..
Eu criei um tópico em VB6 tb, mas não consegui muito progresso.. acho que pelo web service que estou tentando acessar, mas pode ser em C# também.
Eu preciso acessar um webservice e deixar informações da Nota Fiscal de Serviço, tentei fazer em VB6 que é a linguagem que usamos na empresa, não consegui.. sempre da um erro.. ja mencionado em outro topico..
O pessoal do suporte disponibilizou um manual para fazer em c#. o manual é um exemplo de como fazer.. que está abaixo do meu exemplo..
Fiz a minha programação de acordo com o que entendi.. qualquer ligação que faço para o suporte, eles mandam ver o manual..
Está dando um erro de conversão de dados, Eu não conheço muuuito de C#, deve ser alguma burrada minha, mas.. preciso resolver...
Se alguém puder identificar meu erro, por favor me informe..
Código passado de exemplo pelo suporte..
qualquer pergunta que eu faça ao suporte, eles mandam ver o manual ( que é isto ai.. )
Array ret = null;
try
{
Declaracao = [Ô]SELECT * FROM Nfe[Ô];
Comando = new OleDbCommand(Declaracao, _conexao);
Leitura = Comando.ExecuteReader();
while (Leitura.Read())
{
ret = wsmj.EnvNfe(
_usuario,
_senha,
Leitura[[Ô]prf[Ô]].ToString(),
Leitura[[Ô]cnp[Ô]].ToString(),
Leitura[[Ô]ctr[Ô]].ToString(),
Leitura[[Ô]cnpj[Ô]].ToString(),
Leitura[[Ô]cnpjn[Ô]].ToString(),
Leitura[[Ô]ie[Ô]].ToString(),
Leitura[[Ô]im[Ô]].ToString(),
Leitura[[Ô]lgr[Ô]].ToString(),
Leitura[[Ô]num[Ô]].ToString(),
....
tem outros campos.. mas não é o problema aqui..
...
comp.DoubleToDolar(Leitura[[Ô]paisest[Ô]].ToString()));
//trata o status de controle
if (((WebReference.EnvNfe[])(ret))[0].okk.ToString().Equals([Ô]OK[Ô]))
{
_enviados[0]++;
}
else
{
_erros.Add(((WebReference.EnvNfe[])(ret))[0].okk.ToString());
_erro = true;
}
}
Leitura.Close();
}
catch (InvalidOperationException Ex)
{
Leitura.Dispose();
_erros.Add(Ex.Message);
}
catch (Exception Ex)
{
Leitura.Dispose();
_erros.Add(Ex.Message);
}
///////////////////////
//Meu código em C#
private void bEnviar_Click(object sender, EventArgs e)
{
try
{
// strUrl = [Ô]http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php?wsdl[Ô]
// strSoapAction = [Ô]http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php/EnvNfe?wsdl[Ô]
Boolean _erro;
string[] s = new string[110];
List<string> lstC = new List<string>();
lstC = fTxt2List([Ô]C:\\NFSe\ xtTeste.txt[Ô]); // carrego os dados ja gerado pelo sistema em VB. na ordem dos campos
lstConteudo.DataSource = lstC;
int nEnv = 0;
String vUsuario = [Ô]123456[Ô];
String vSenha = [Ô]654321[Ô];
Array ret = null;
try
{
for( int i = 0; i < 110; i++ ) { s[i] = lstC[i]; }
ret = s.ToArray();
// Dá erro na linha baixo.. diz que não pode converter tipos. Creio que eu estou errando no preenchimento da variavel ret.
if (((wsRefEnvia.EnvNfe[])(ret))[0].okk.ToString().Equals([Ô]OK[Ô]))
{ nEnv++; }
else
{
lstRetorno.Items.Add(((wsRefEnvia.EnvNfe[])(ret))[0].okk.ToString());
_erro = true;
}
}
catch (InvalidOperationException Ex)
{ lstRetorno.Items.Add([Ô]IOE: [Ô] + Ex.Message); }
catch (Exception Ex)
{ lstRetorno.Items.Add([Ô]E1: [Ô] + Ex.Message); }
}
catch (Exception Ex)
{ lstRetorno.Items.Add([Ô]E2: [Ô] + Ex.Message); }
}
///////////////
public List<string> fTxt2List(string pArquivo)
{
List<string> vlst = new List<string>();
if (System.IO.File.Exists(pArquivo))
{
StreamReader srTexto = srTexto = new StreamReader(pArquivo);
String sLinha = srTexto.ReadLine();
while (sLinha != null)
{
vlst.Add(sLinha);
sLinha = srTexto.ReadLine();
}
}
return vlst;
}
////////////////////////////////////////////////////////
Eu criei um tópico em VB6 tb, mas não consegui muito progresso.. acho que pelo web service que estou tentando acessar, mas pode ser em C# também.
Eu preciso acessar um webservice e deixar informações da Nota Fiscal de Serviço, tentei fazer em VB6 que é a linguagem que usamos na empresa, não consegui.. sempre da um erro.. ja mencionado em outro topico..
O pessoal do suporte disponibilizou um manual para fazer em c#. o manual é um exemplo de como fazer.. que está abaixo do meu exemplo..
Fiz a minha programação de acordo com o que entendi.. qualquer ligação que faço para o suporte, eles mandam ver o manual..
Está dando um erro de conversão de dados, Eu não conheço muuuito de C#, deve ser alguma burrada minha, mas.. preciso resolver...
Se alguém puder identificar meu erro, por favor me informe..
Código passado de exemplo pelo suporte..
qualquer pergunta que eu faça ao suporte, eles mandam ver o manual ( que é isto ai.. )
Array ret = null;
try
{
Declaracao = [Ô]SELECT * FROM Nfe[Ô];
Comando = new OleDbCommand(Declaracao, _conexao);
Leitura = Comando.ExecuteReader();
while (Leitura.Read())
{
ret = wsmj.EnvNfe(
_usuario,
_senha,
Leitura[[Ô]prf[Ô]].ToString(),
Leitura[[Ô]cnp[Ô]].ToString(),
Leitura[[Ô]ctr[Ô]].ToString(),
Leitura[[Ô]cnpj[Ô]].ToString(),
Leitura[[Ô]cnpjn[Ô]].ToString(),
Leitura[[Ô]ie[Ô]].ToString(),
Leitura[[Ô]im[Ô]].ToString(),
Leitura[[Ô]lgr[Ô]].ToString(),
Leitura[[Ô]num[Ô]].ToString(),
....
tem outros campos.. mas não é o problema aqui..
...
comp.DoubleToDolar(Leitura[[Ô]paisest[Ô]].ToString()));
//trata o status de controle
if (((WebReference.EnvNfe[])(ret))[0].okk.ToString().Equals([Ô]OK[Ô]))
{
_enviados[0]++;
}
else
{
_erros.Add(((WebReference.EnvNfe[])(ret))[0].okk.ToString());
_erro = true;
}
}
Leitura.Close();
}
catch (InvalidOperationException Ex)
{
Leitura.Dispose();
_erros.Add(Ex.Message);
}
catch (Exception Ex)
{
Leitura.Dispose();
_erros.Add(Ex.Message);
}
///////////////////////
//Meu código em C#
private void bEnviar_Click(object sender, EventArgs e)
{
try
{
// strUrl = [Ô]http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php?wsdl[Ô]
// strSoapAction = [Ô]http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php/EnvNfe?wsdl[Ô]
Boolean _erro;
string[] s = new string[110];
List<string> lstC = new List<string>();
lstC = fTxt2List([Ô]C:\\NFSe\ xtTeste.txt[Ô]); // carrego os dados ja gerado pelo sistema em VB. na ordem dos campos
lstConteudo.DataSource = lstC;
int nEnv = 0;
String vUsuario = [Ô]123456[Ô];
String vSenha = [Ô]654321[Ô];
Array ret = null;
try
{
for( int i = 0; i < 110; i++ ) { s[i] = lstC[i]; }
ret = s.ToArray();
// Dá erro na linha baixo.. diz que não pode converter tipos. Creio que eu estou errando no preenchimento da variavel ret.
if (((wsRefEnvia.EnvNfe[])(ret))[0].okk.ToString().Equals([Ô]OK[Ô]))
{ nEnv++; }
else
{
lstRetorno.Items.Add(((wsRefEnvia.EnvNfe[])(ret))[0].okk.ToString());
_erro = true;
}
}
catch (InvalidOperationException Ex)
{ lstRetorno.Items.Add([Ô]IOE: [Ô] + Ex.Message); }
catch (Exception Ex)
{ lstRetorno.Items.Add([Ô]E1: [Ô] + Ex.Message); }
}
catch (Exception Ex)
{ lstRetorno.Items.Add([Ô]E2: [Ô] + Ex.Message); }
}
///////////////
public List<string> fTxt2List(string pArquivo)
{
List<string> vlst = new List<string>();
if (System.IO.File.Exists(pArquivo))
{
StreamReader srTexto = srTexto = new StreamReader(pArquivo);
String sLinha = srTexto.ReadLine();
while (sLinha != null)
{
vlst.Add(sLinha);
sLinha = srTexto.ReadLine();
}
}
return vlst;
}
////////////////////////////////////////////////////////
Qual é o valor de ret, quando sai da linha ret = s.ToArray(); ????
Tentou utilizando o método Add de ret ???
Tipo assim :
ret.Add(s);
ao invés de :
ret = s.ToArray();
Qual o tipo de dados esperado em :
wsRefEnvia.EnvNfe[])(?????)
Tentou utilizando o método Add de ret ???
Tipo assim :
ret.Add(s);
ao invés de :
ret = s.ToArray();
Qual o tipo de dados esperado em :
wsRefEnvia.EnvNfe[])(?????)
Foxman,
Tentei agora o ret.Add(s); mas dá o erro:
[ô]System.Array[ô] does not contain a definition for [ô]Add[ô] and no extension method [ô]Add[ô] accepting a first argument of type [ô]System.Array[ô] could be found (are you missing a using directive or an assembly reference?)
o tipo do retorno,da função, wsRefEnvia.EnvNfe[]) presumo que seja String, mas presumo.. como disse todo material que nos deram foi este exemplo, e quando pergunto algo, eles mandam ver o [Ô]manual[Ô].. difÃcil...
obrigado pela dica, mas se souber de algo mais..
agradeço.
Tentei agora o ret.Add(s); mas dá o erro:
[ô]System.Array[ô] does not contain a definition for [ô]Add[ô] and no extension method [ô]Add[ô] accepting a first argument of type [ô]System.Array[ô] could be found (are you missing a using directive or an assembly reference?)
o tipo do retorno,da função, wsRefEnvia.EnvNfe[]) presumo que seja String, mas presumo.. como disse todo material que nos deram foi este exemplo, e quando pergunto algo, eles mandam ver o [Ô]manual[Ô].. difÃcil...
obrigado pela dica, mas se souber de algo mais..
agradeço.
Alguém mais tem alguma ideia??
Acredito que seja uma questão simples:
Se você pegar essa parte do código, vai ver que está tentando converter o Array (ret) para o tipo wsRefEnvia.EnvNfe.
Olhando um pouco mais a cima do seu código vemos o seguinte trecho:
Sendo que [Ô]s[Ô] é um array de string.
Resumindo, você está tentando converter uma array de string para o tipo wsRefEnviaEnvNfe. Realmente, não vai é pra dar certo.
Acredito que uma opção seria, mais ou menos assim:
wsRefEnvia.EnvNfe[] objWs = new wsRefEnvia.EnvNfe[ret.Count];
objWs[0].PropriedadeString = ret[0];
Etc... Resumindo, instanciar objeto por objeto e jogar o ret[0] pra uma propriedade do tipo string.
Ok?
Abraços
if (((wsRefEnvia.EnvNfe[])(ret))[0].okk.ToString().Equals([Ô]OK[Ô]))
Se você pegar essa parte do código, vai ver que está tentando converter o Array (ret) para o tipo wsRefEnvia.EnvNfe.
Olhando um pouco mais a cima do seu código vemos o seguinte trecho:
ret = s.ToArray();
Sendo que [Ô]s[Ô] é um array de string.
Resumindo, você está tentando converter uma array de string para o tipo wsRefEnviaEnvNfe. Realmente, não vai é pra dar certo.
Acredito que uma opção seria, mais ou menos assim:
wsRefEnvia.EnvNfe[] objWs = new wsRefEnvia.EnvNfe[ret.Count];
objWs[0].PropriedadeString = ret[0];
Etc... Resumindo, instanciar objeto por objeto e jogar o ret[0] pra uma propriedade do tipo string.
Ok?
Abraços
Na verdade não estou nem conseguindo atribuir valor à Array ret.
não tem a opção de Add. ou algo assim.
tentei
ret[0] = [Ô]123[Ô]
ret.SetValue([Ô]123[Ô],0);
nada..
tentei colocar ret.Initialize();
mas nada tb.
por isto tinha colocado atribuÃdo os valores ao S.
não tem a opção de Add. ou algo assim.
tentei
ret[0] = [Ô]123[Ô]
ret.SetValue([Ô]123[Ô],0);
nada..
tentei colocar ret.Initialize();
mas nada tb.
por isto tinha colocado atribuÃdo os valores ao S.
Passe o endereço do webservice que eu faço um exemplo pra você.
no manual é: http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php
ai fuçando na net tentei o ? wsdl..
http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php?wsdl
http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php/EnvNfe?wsdl
Estou perdido nisto.. não conheço muito de c#, e pouco de ws. uso ftp, mas acho que é diferente..
em vb6, fiz o xml para envio ao webcervice.. mas não vai também..
se puder me ajudar, agradeço muito.
anexei o manual que deram para mim. talvez ajude a descobrir oque estou errando... ou mesmo seu modelo..
Obrigado.
Sidnei Nardo
ai fuçando na net tentei o ? wsdl..
http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php?wsdl
http://www.mgmtributacao.com.br/issqn/wservice/wsnfeenvia.php/EnvNfe?wsdl
Estou perdido nisto.. não conheço muito de c#, e pouco de ws. uso ftp, mas acho que é diferente..
em vb6, fiz o xml para envio ao webcervice.. mas não vai também..
se puder me ajudar, agradeço muito.
anexei o manual que deram para mim. talvez ajude a descobrir oque estou errando... ou mesmo seu modelo..
Obrigado.
Sidnei Nardo
Alguém tem alguma ideia?
Obrigado.
Obrigado.
Como vc esta adicionado o webservice ao projeto, adicionando referencia ou vis svcutil ?
Ola..
Eu vou em Project -> Add Service Reference.
Eu vou em Project -> Add Service Reference.
Faça seu login para responder