A mensagem XML do cabeçalho do arquivo enviado está fora do padrão especificado

Olá a todos,

Estou desenvolvendo uma aplicação usando c# para envio da NFS-e e estou recebendo a seguinte mensagem de erro ao enviar o lote RPS:
A mensagem XML do cabeçalho do arquivo enviado está fora do padrão especificado.
Pelas pesquisas que fiz, para o município de Vitória não há cabeçalho, bem como, estou inserindo o endereço em Adicionar Referência de Serviço / Avançado / Adicionar Referência web e ainda assim eu recebo a mesma mensagem de erro.
Segue abaixo meu código para que alguém possa dar olhada.

            ES_Vitoria.NotaFiscalService servico = new ES_Vitoria.NotaFiscalService();
            servico.PreAuthenticate = true;
            servico.ClientCertificates.Add(cert);
            MsgRetorno = (string)servico.RecepcionarLoteRpsSincrono(StrXML);
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(MsgRetorno);
            doc.Save(@"D:\NFSe\MensagemDeRetorno.xml");

Olá,

Vitória e Vila Velha usam a mesma solução.

Eu uso uma classe intermediária para corrigir o erro do C# com os webservices brasileiros.

    #region 
    //Classes Auxiliares para adicionar o Certificado a Requisição
    public class WS_3205200A_Custom : WS_3205200A.NotaFiscalService
    {
        private HttpStatusCode cLastCode;
        private X509Certificate2 cCertificado;

        public X509Certificate2 Certificado
        {
            get { return cCertificado; }
            set { cCertificado = value; }
        }

        public HttpStatusCode lastCode { get { return cLastCode; } }

        public WS_3205200A_Custom(
            X509Certificate2 pCertificado,
            string pUrl)
        {
            Certificado = pCertificado;
            Url = pUrl;
        }

        // Override para informar o certificado
        protected override System.Net.WebRequest GetWebRequest(Uri uri)
        {
            // instanciar o objeto de requisição para a Url informada no construtor da classe
            System.Net.WebRequest wr = System.Net.WebRequest.Create(new Uri(Url));
            System.Net.HttpWebRequest hr = ((System.Net.HttpWebRequest)wr);

            // incluir o certificado digital na requisição
            hr.ClientCertificates.Clear();
            if (cCertificado != null)
                hr.ClientCertificates.Add(cCertificado);
            hr.PreAuthenticate = true;
            hr.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

            return wr;
        }

        // Guardar o ultimo StatusCode
        protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request)
        {
            System.Net.WebResponse wr = base.GetWebResponse(request);
            System.Net.HttpWebResponse hr = ((System.Net.HttpWebResponse)wr);
            cLastCode = hr.StatusCode;

            return wr;
        }

        // Callback usado para validar o certificate com a SSL conversation
        private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
        {
            return true;
        }

    }
    #endregion

Com isso eu chamo assim:

WS_3205200A_Custom ws1 = new WS_3205200A_Custom(cert, "https://issonline.vilavelha.es.gov.br/SistemaIss/WebService/NotaFiscalService.asmx");

string s = "";
s = this.asXML();
s = ws1.GerarNfse(s);

Assim funciona perfeitamente.