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