Exemplo em C#.
Consuma o webservice usando Service Refencences.
No caso abaixo eu dei o nome de WS_3201209.
string cabecalho =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
"<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" "+
"versao=\"2.04\">"+
"<versaoDados>2.04</versaoDados>"+
"</cabecalho>";
bool homologacao = true;
string urlProd = "http://notafse.cachoeiro.es.gov.br:8189/NfseWSService";
string urlHomo = "http://nfsehomologacao.cachoeiro.es.gov.br:8188/nfse-cachoeirodeitapemirim-es/NfseWSService";
string sService = (homologacao ? urlHomo : urlProd);
WS_3201209.nfseClient ws = new WS_3201209.nfseClient();
ws.Endpoint.Address = new System.ServiceModel.EndpointAddress(sService);
WS_3201209.GerarNfse req = new WS_3201209.GerarNfse();
req.GerarNfseRequest = new WS_3201209.input();
req.GerarNfseRequest.nfseCabecMsg = cabecalho;
req.GerarNfseRequest.nfseDadosMsg = dados();
var res = ws1.GerarNfse(req);
Essa mensagem tem ocorrido constantemente:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<GerarNfseResposta xmlns="http://www.abrasf.org.br/nfse.xsd" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#">
<ListaMensagemRetorno>
<MensagemRetorno>
<Codigo>EL55</Codigo>
<Mensagem>Arquivo Inválido - Verifique a extrutura do arquivo se esta nos padrões solicitados!.</Mensagem>
<Correcao></Correcao>
</MensagemRetorno>
</ListaMensagemRetorno>
</GerarNfseResposta>
Mesmo o arquivo estando certo.
Depois você consulta, a Nota e ela está lá gerada.
Aviso aos navegantes:
Não usem o método GerarNfse.
Está incompleto e responde com erro EL55 para quase tudo.Ao invés use EnviarLoteRpsSincrono.
Funciona de forma mais estável.