public bool AfterImportMetadata(ServiceDescriptor serviceDescriptor) { try { // Convert errors to warnings to workaround the issue that many validation errors from XSD compiler // can be ignored. for (int idx = _wsdlImporter.Errors.Count - 1; idx >= _nonWsdlImportErrors; idx--) { var error = _wsdlImporter.Errors[idx]; if (!error.IsWarning) { ToolConsole.ExitCode = ToolExitCode.ValidationErrorTurnedWarning; var warning = new MetadataConversionError(error.Message, isWarning: true); _wsdlImporter.Errors[idx] = warning; } } MarkupTelemetryHelper.SendBindingData(serviceDescriptor.Bindings); Collection <ServiceEndpoint> endpoints = new Collection <ServiceEndpoint>(serviceDescriptor.Endpoints.ToList()); Collection <Binding> bindings = new Collection <Binding>(serviceDescriptor.Bindings.ToList()); Collection <ContractDescription> contracts = new Collection <ContractDescription>(serviceDescriptor.Contracts.ToList()); _codegenExtension.WsdlImported(_wsdlImporter, endpoints, bindings, contracts); } catch (Exception e) { ToolConsole.WriteError(e); } ToolConsole.WriteConversionErrors(_wsdlImporter.Errors); ImportServiceContracts(serviceDescriptor); ToolConsole.WriteConversionErrors(_contractGenerator.Errors); var contractsResolved = true; if (_validateMetadataImport) { _validateMetadataImport = false; contractsResolved = ContractsResolved(serviceDescriptor, this.CodeCompileUnit); if (!contractsResolved) { var importer1 = ServiceDescriptor.DefaultUseMessageFormat ? typeof(DataContractSerializerMessageContractImporter) : typeof(XmlSerializerMessageContractImporter); var importer2 = ServiceDescriptor.DefaultUseMessageFormat ? typeof(XmlSerializerMessageContractImporter) : typeof(DataContractSerializerMessageContractImporter); ToolConsole.WriteWarning(string.Format(CultureInfo.CurrentCulture, SR.WrnCouldNotGenerateContractOperationsFormat, importer1, importer2)); } } // on false, ServiceDescriptor will attempt to use a different contract serializer. return(contractsResolved); }