protected override void ReceiveOneWay(MessaggioEGovernment richiesta)
 {
 }
        protected override MessaggioEGovernment Receive(MessaggioEGovernment richiesta)
        {
            // leggo il servizio chiamato
            // string Azione = richiesta.Intestazione.Azione;
            string NomeServizio = richiesta.Intestazione.Servizio.Value;
            string errori       = null;
            // leggo i campi per la creazione del messaggio di risposta
            nvaegov porta = new nvaegov();
            MessaggioEGovernment risposta = porta.GetDefaultMessaggioEGovernment();
            string profilocollaborazione  = richiesta.Intestazione.ProfiloCollaborazione.Value.ToString();

            risposta.Intestazione.Destinatario = richiesta.Intestazione.Mittente[0];
            risposta.Intestazione.Messaggio.RiferimentoMessaggio = richiesta.Intestazione.Messaggio.Identificatore;
            string logid  = richiesta.Intestazione.Messaggio.Identificatore;
            string Azione = richiesta.Intestazione.Azione;

            // carico lo schema per validare la richiesta
            // porta.SchemaContenutoApplicativo.LoadFromFile(ConfigurationManager.AppSettings["XSDSchema"]);
            // porta.ValidateRequest();
            Unisys.CdR.WS.ServiziAnagrafici.EGOV.EGovUtility     egovu = new Unisys.CdR.WS.ServiziAnagrafici.EGOV.EGovUtility();
            Unisys.CdR.WS.ServiziAnagrafici.EGOV.EGovCallService egos  = new Unisys.CdR.WS.ServiziAnagrafici.EGOV.EGovCallService();
            if (egovu.CheckServizio(Azione) == false)
            {
                errori = "Servizio non riconosciuto";
                Eccezione eccezione = new Eccezione("Azione non riconosciuta", Eccezione.CodiceEccezioneEnum.EGOV_IT_105, Eccezione.EccezioneRilevanzaEnum.GRAVE, "prova");
                risposta.Intestazione.ListaEccezioni.Add(eccezione);
            }

            if (Azione != NomeServizio)
            {
                errori = "Azione diversa dal Servizio";
                Eccezione eccezione = new Eccezione("Azione diversa dal Servizio richiesto", Eccezione.CodiceEccezioneEnum.EGOV_IT_105, Eccezione.EccezioneRilevanzaEnum.GRAVE, "prova");
                risposta.Intestazione.ListaEccezioni.Add(eccezione);
            }

            if (egovu.CheckServizio(NomeServizio) == false)
            {
                errori = "Servizio non riconosciuto";
                Eccezione eccezione = new Eccezione("Servizio non riconosciuto", Eccezione.CodiceEccezioneEnum.EGOV_IT_105, Eccezione.EccezioneRilevanzaEnum.GRAVE, "prova");
                risposta.Intestazione.ListaEccezioni.Add(eccezione);
            }
            // il profilo di collaborazione
            if (profilocollaborazione != ProfiloCollaborazione.ProfiloEnum.EGOV_IT_ServizioSincrono.ToString())
            {
                errori = errori + " Profilo Collaborazione errato";
                Eccezione eccezione = new Eccezione("Profilo Collaborazione errato", Eccezione.CodiceEccezioneEnum.EGOV_IT_103, Eccezione.EccezioneRilevanzaEnum.GRAVE, "prova");
                risposta.Intestazione.ListaEccezioni.Add(eccezione);
            }
            // l'intestazione del destinatario
            if (richiesta.Intestazione.Destinatario.Tipo != "058091" || richiesta.Intestazione.Destinatario.Value != "Comune di Roma")
            {
                errori = errori + " Destinatario Errato";
                Eccezione eccezione = new Eccezione("Destinatario Errato", Eccezione.CodiceEccezioneEnum.EGOV_IT_102, Eccezione.EccezioneRilevanzaEnum.GRAVE, "prova");
                risposta.Intestazione.ListaEccezioni.Add(eccezione);
            }
            XmlDocument xmlRequest = new XmlDocument();
            XmlDocument xmlResp    = new XmlDocument();
            // spacchetto la richiesta
            XmlElement Risposta = xmlRequest.CreateElement("Risposta");

            xmlRequest.AppendChild(Risposta);
            XmlNode xnode        = richiesta.ContenutoApplicativo[0];
            XmlNode xnodeReqRoot = xmlRequest.DocumentElement;
            XmlNode xnodeImp     = xmlRequest.ImportNode(xnode, true);

            xnodeReqRoot.AppendChild(xnodeImp);
            // verifico il body
            if (xmlRequest.InnerText == null)
            {
                errori = " Body Vuoto";
                Eccezione eccezione = new Eccezione("Body vuoto", Eccezione.CodiceEccezioneEnum.EGOV_IT_003, Eccezione.EccezioneRilevanzaEnum.GRAVE, "prova");
                risposta.Intestazione.ListaEccezioni.Add(eccezione);
            }
            // se non ci sono errori chiamo servizio
            if (errori == null)
            {
                switch (NomeServizio)
                {
                case "VerificaAnagrafica":
                    xmlResp = egos.VerificaAnagrafica(xmlRequest, logid);
                    break;

                case "VerificaStoricaDocumenti":
                    xmlResp = egos.VerificaStoricaDocumenti(xmlRequest, logid);
                    break;

                case "VerificaCri":
                    xmlResp = egos.VerificaCri(xmlRequest, logid);
                    break;

                case "VerificaAnagraficaStorica":
                    xmlResp = egos.VerificaAnagraficaStorica(xmlRequest, logid);
                    break;

                case "VerificaAnagraficaSuper":
                    xmlResp = egos.VerificaAnagraficaSuper(xmlRequest, logid);
                    break;

                case "VerificaAnagraficaCached":
                    xmlResp = egos.VerificaAnagraficaCached(xmlRequest, logid);
                    break;

                case "VerificaLeggeRutelli":
                    xmlResp = egos.VerificaLeggeRutelli(xmlRequest, logid);
                    break;

                case "VerificaAnagraficaEstesa":
                    xmlResp = egos.VerificaAnagraficaEstesa(xmlRequest, logid);
                    break;

                case "VerificaCartaIdent":
                    xmlResp = egos.VerificaCartaIdent(xmlRequest, logid);
                    break;

                case "VerificaDocumenti":
                    xmlResp = egos.VerificaDocumenti(xmlRequest, logid);
                    break;

                case "VerificaStoricoFamigliaXData":
                    xmlResp = egos.VerificaStoricoFamigliaXData(xmlRequest, logid);
                    break;

                case "VerificaElettorale":
                    xmlResp = egos.VerificaElettorale(xmlRequest, logid);
                    break;

                // case "VerificaSezioneElettorale":
                //   xmlResp = egos.VerificaSezioneElettorale(xmlRequest);
                //  break;
                //case "VerificaLibrettiLavoro":
                //  xmlResp = egos.VerificaLibrettiLavoro(xmlRequest);
                // break;
                case "VerificaCI":
                    xmlResp = egos.VerificaCI(xmlRequest, logid);
                    break;

                case "VerificaDomXRangeCivici":
                    xmlResp = egos.VerificaDomXRangeCivici(xmlRequest, logid);
                    break;

                case "VerificaDomiciliatiperIndirizzo":
                    xmlResp = egos.VerificaDomiciliatiperIndirizzo(xmlRequest, logid);
                    break;

                case "VerificaDomiciliatiperIndirizzoeFamiglia":
                    xmlResp = egos.VerificaDomiciliatiperIndirizzoeFamiglia(xmlRequest, logid);
                    break;

                case "VerificaVaccinazioni":
                    xmlResp = egos.VerificaVaccinazioni(xmlRequest, logid);
                    break;

                case "VerificaLevaMilitare":
                    xmlResp = egos.VerificaLevaMilitare(xmlRequest, logid);
                    break;

                case "VerificaStatoFamigliaConv":
                    xmlResp = egos.VerificaStatoFamigliaConv(xmlRequest, logid);
                    break;

                case "VerificaSitFamigliaConv":
                    xmlResp = egos.VerificaSitFamigliaConv(xmlRequest, logid);
                    break;

                case "VerificaPerm":
                    xmlResp = egos.VerificaPerm(xmlRequest, logid);
                    break;

                case "VerificaNullaOstaCI":
                    xmlResp = egos.VerificaNullaOstaCI(xmlRequest, logid);
                    break;
                }
                try
                {
                    //Response
                    risposta.Intestazione.Servizio = richiesta.Intestazione.Servizio;
                    risposta.Intestazione.Azione   = richiesta.Intestazione.Azione;
                    // richiesta.Intestazione.Messaggio = new Messaggio(portaDelegata1.NewIdentificatore(), new OraRegistrazione(DateTime.Now, OraRegistrazione.TempoDiRiferimentoEnum.EGOV_IT_Locale));
                    risposta.ContenutoApplicativo.Add(xmlResp.OuterXml);
                }

                catch (Exception ex)
                {
                    throw new EccezioneEGovernment(ex.Message, Eccezione.CodiceEccezioneEnum.EGOV_IT_001, Eccezione.EccezioneRilevanzaEnum.GRAVE, ex.StackTrace);
                }
            }

            return(risposta);
        }