NFe.Components.WebServiceProxy.GerarGrafo C# (CSharp) Method

GerarGrafo() private method

Gerar a estrutura e o grafo da classe
private GerarGrafo ( ) : CodeNamespace
return System.CodeDom.CodeNamespace
        private CodeNamespace GerarGrafo()
        {
            #region Gerar a estrutura da classe do serviço
            //Gerar a estrutura da classe do serviço
            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
            importer.AddServiceDescription(this.serviceDescription, string.Empty, string.Empty);

            //Definir o nome do protocolo a ser utilizado
            //Não posso definir, tenho que deixar por conta do WSDL definir, ou pode dar erro em alguns estados
            //importer.ProtocolName = "Soap12";
            if (PadraoNFSe == PadroesNFSe.THEMA)
                importer.ProtocolName = "Soap";

            //Tipos deste serviço devem ser gerados como propriedades e não como simples campos
            importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;
            #endregion

            #region Se a NFSe for padrão DUETO/WEBISS/SALVADOR_BA/PRONIN preciso importar os schemas do WSDL
            switch (PadraoNFSe)
            {
                case PadroesNFSe.SMARAPD:
                case PadroesNFSe.DUETO:
                case PadroesNFSe.WEBISS:
                case PadroesNFSe.SALVADOR_BA:
                case PadroesNFSe.GIF:
                case PadroesNFSe.PRONIN:
                    //Tive que utilizar a WebClient para que a OpenRead funcionasse, não foi possível fazer funcionar com a SecureWebClient. Tem que analisar melhor. Wandrey e Renan 10/09/2013
                    WebClient client = new WebClient();
                    Stream stream = client.OpenRead(ArquivoWSDL);

                    //Esta sim tem que ser com a SecureWebClient pq tem que ter o certificado. Wandrey 10/09/2013
                    SecureWebClient client2 = new SecureWebClient(oCertificado);

                    // Add any imported files
                    foreach (System.Xml.Schema.XmlSchema wsdlSchema in serviceDescription.Types.Schemas)
                    {
                        foreach (System.Xml.Schema.XmlSchemaObject externalSchema in wsdlSchema.Includes)
                        {
                            if (externalSchema is System.Xml.Schema.XmlSchemaImport)
                            {
                                Uri baseUri = new Uri(ArquivoWSDL);
                                Uri schemaUri = new Uri(baseUri, ((System.Xml.Schema.XmlSchemaExternal)externalSchema).SchemaLocation);
                                stream = client2.OpenRead(schemaUri);
                                System.Xml.Schema.XmlSchema schema = System.Xml.Schema.XmlSchema.Read(stream, null);
                                importer.Schemas.Add(schema);
                            }
                        }
                    }
                    break;
            }
            #endregion

            #region Gerar o o grafo da classe para depois gerar o código
            CodeNamespace @namespace = new CodeNamespace();
            CodeCompileUnit unit = new CodeCompileUnit();
            unit.Namespaces.Add(@namespace);
            ServiceDescriptionImportWarnings warmings = importer.Import(@namespace, unit);
            #endregion

            return @namespace;
        }
        #endregion