/// <summary> /// Gerar a estrutura e o grafo da classe /// </summary> 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); }
/// <summary> /// Gerar a estrutura e o grafo da classe /// </summary> 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; }