Documentación Técnica del Proyecto CServer#
Nombre del proyecto: CServer
Descripción y propósito: Servicio de Windows para procesamiento asíncrono de reportes de cobranza mediante un sistema de cola de trabajos (job queue). El servicio mantiene un pool de threads que procesa reportes generados dinámicamente desde una base de datos SQL Server.
Versión del framework .NET utilizado: .NET Framework 4.0
Lenguaje: Visual Basic .NET
Tipo de aplicación: Windows Service (Servicio de Windows)
Versión del proyecto: 1.0.0.0
Compañía: Grupo KC Agente de Seguros SAPI de CV
Fecha de última modificación: 17 de junio de 2024
Versión del servicio: 3.0.1
2. MAPA DE SITIO / ESTRUCTURA DEL PROYECTO#
📁 CServer/
├── 📁 My Project/
│ ├── 📄 AssemblyInfo.vb (Información del ensamblado)
│ ├── 📄 Application.Designer.vb
│ ├── 📄 Application.myapp
│ ├── 📄 Resources.Designer.vb
│ ├── 📄 Resources.resx
│ ├── 📄 Settings.Designer.vb
│ └── 📄 Settings.settings
├── 📁 bin/
│ ├── 📁 Debug/ (Binarios de desarrollo)
│ └── 📁 Release/ (Binarios de producción)
├── 📁 obj/ (Archivos intermedios de compilación)
├── 📄 Service1.vb ⭐ (Lógica principal del servicio)
├── 📄 Service1.Designer.vb
├── 📄 Service1.resx
├── 📄 Persistencia.vb ⭐ (Capa de acceso a datos)
├── 📄 ProjectInstaller.vb (Instalador del servicio)
├── 📄 ProjectInstaller.Designer.vb
├── 📄 ProjectInstaller.resx
├── 📄 Settings.vb
├── 📄 app.config ⭐ (Configuración del servicio)
├── 📄 CServer.vbproj (Archivo de proyecto)
└── 📄 CServer_*_TemporaryKey.pfx (Claves de firma)
Namespace Principal#
CServer: Namespace raíz del proyecto
Referencias de Proyectos#
CLogic (Project Reference): Biblioteca de lógica de negocio externa que contiene la implementación de procesamiento de trabajos
3. INVENTARIO DE LIBRERÍAS Y DEPENDENCIAS#
Librerías Externas (NuGet/DLL)#
| Librería | Versión Actual | Propósito | Categoría |
|---|
| Ionic.Utils.Zip | 1.3.0.0 | Compresión y manejo de archivos ZIP | Utilidades |
Referencias del Framework .NET#
| Librería | Propósito | Categoría |
|---|
| System | Funcionalidades base del framework | Core |
| System.Configuration | Lectura de archivos de configuración | Configuración |
| System.Configuration.Install | Instalación del servicio de Windows | Deployment |
| System.Data | Acceso a datos ADO.NET | Datos |
| System.Deployment | Publicación ClickOnce | Deployment |
| System.ServiceProcess | Funcionalidad de servicios de Windows | Servicios |
| System.Web.Extensions | JSON serialization y extensiones web | Utilidades |
| System.Windows.Forms | Interfaces de usuario básicas | UI |
| System.Xml | Procesamiento de XML | Datos |
Referencias de Proyectos#
| Proyecto | GUID | Propósito |
|---|
| CLogic | {505750e8-cb22-4452-8fa0-8f1fab3cd11a} | Lógica de negocio para procesamiento de trabajos y reportes |
4. ARQUITECTURA DEL PROYECTO#
4.1 Patrón Arquitectónico#
El proyecto implementa un patrón de Arquitectura Orientada a Servicios con Pool de Threads y Job Queue Pattern:Service-Oriented Architecture (SOA): Servicio de Windows independiente
Thread Pool Pattern: Gestión eficiente de concurrencia con .NET ThreadPool
Job Queue Pattern: Cola de trabajos procesados asíncronamente
Repository Pattern: Abstracción de acceso a datos en la clase Persistencia
Timer-Based Polling: Sondeo periódico de nuevos trabajos cada 2 segundos
4.2 Diagrama de Arquitectura (Mermaid)#
4.3 Componentes Principales#
Servicio Principal (Service1.vb)#
Responsabilidad: Gestión del ciclo de vida del servicio y coordinación de threads
Timer que verifica nuevos trabajos cada 2 segundos
Encola trabajos en el ThreadPool (.NET)
Gestión de 100 threads concurrentes máximo
Logging sincronizado con locks
Tarea programada diaria a medianoche
OnStart(): Inicialización del servicio
OnTimedEvent(): Sondeo de nuevos trabajos
Corre(): Ejecución de un trabajo específico
Task(): Tarea programada diaria
WriteLog(): Escritura thread-safe al log
Capa de Persistencia (Persistencia.vb)#
Responsabilidad: Abstracción del acceso a datos SQL Server
Patrón implementado: Static Repository Pattern
Ejecución de Stored Procedures
Ejecución de queries ad-hoc
Manejo de parámetros dinámicos con Hashtable
Obtención de valores Identity
EjecutaDataTableSP(): Ejecuta SP y retorna DataTable
EjecutaDataTableQry(): Ejecuta query y retorna DataTable
EjecutaSP(): Ejecuta SP sin retorno de datos
EjecutaQuery(): Ejecuta query de modificación
EjecutaQueryIdentity(): Ejecuta INSERT y retorna ID generado
EjecutaSPint32(): Ejecuta SP y retorna valor escalar
Lógica de Negocio (CLogic - Proyecto Externo)#
Responsabilidad: Implementación de tipos de trabajos y procesamiento de reportes
Definición de tipos de trabajo (enum Tipo)
Estados de trabajo (Status)
Procesamiento de reportes Crystal Reports
Instalador del Servicio (ProjectInstaller.vb)#
Responsabilidad: Configuración de instalación del servicio de Windows
Configuración: Nombre del servicio, descripción, modo de inicio
4.4 Flujo de Datos#
5. ASPECTOS MÁS RELEVANTES#
5.1 Funcionalidades Principales#
1.
Procesamiento Asíncrono de ReportesCola de trabajos basada en base de datos
Procesamiento concurrente con ThreadPool
Máximo 100 trabajos simultáneos
2.
Generación de Reportes DinámicosIntegración con Crystal Reports
Tipos de reportes parametrizados
3.
Gestión de Estados de TrabajosEstado En_Proceso: En ejecución
Estado Procesado: Completado exitosamente
Estado Falla: Error en procesamiento
4.
Sistema de Logging Thread-SafeEscritura sincronizada con locks
Log con timestamp en cada entrada
Registro de inicio/fin de trabajos y errores
5.
Generación de archivos ZIP con Ionic.Utils.Zip
Soporte para reportes con múltiples archivos
6.
Ejecución automática a medianoche
Configurada para mantenimiento o procesos batch
7.
Polling cada 2 segundos de nuevos trabajos
Auto-recuperación ante errores
8.
Manejo de Rutas ConfigurablesRutas de salida de PDFs configurables
Rutas de reportes RPT configurables
Rutas de archivos ZIP configurables
5.2 Configuraciones Críticas#
Connection Strings#
<connectionStrings>
<add name="cobranzaConnectionString"
providerName="System.Data.SqlClient"
connectionString="Data Source=sql.prod;Initial Catalog=AndromedaDB;User ID=olympus_cserver;Password=***" />
</connectionStrings>
AppSettings - Producción#
<appSettings>
<add key="output" value="G:\Prod\Andromeda\Web\Reportes\pdfs\" />
<add key="zip" value="G:\Prod\Andromeda\Web\Reportes\pdfs\" />
<add key="reportes" value="G:\Prod\Andromeda\CLogic\Reportes\" />
<add key="PdfOutputPath" value="G:\Prod\Andromeda\Web\Reportes\pdfs\" />
<add key="log" value="cserver.log" />
<add key="RutaLog" value="C:\" />
<add key="OlympusDBVinculada" value="[olympus_op_pr]." />
<add key="OlympusDB" value="[olympus_op_pr]" />
<add key="CobranzaDBVinculada" value="OlympuscobranzaTest.dbo." />
<add key="CobranzaDB" value="OlympuscobranzaTest" />
</appSettings>
Configuración del ThreadPool#
ThreadPool.SetMaxThreads(100, 100)
Intervalo del Timer#
Tic_Tok.Interval = 2000 ' 2 segundos
5.3 Patrones de Diseño Implementados#
1.
Implementación: System.Threading.ThreadPool
Propósito: Gestión eficiente de recursos y concurrencia
Ubicación: Service1.vb líneas 43-80
2.
Repository Pattern (Static)Implementación: Clase Persistencia con métodos estáticos
Propósito: Abstracción de acceso a datos
Ubicación: Persistencia.vb
3.
Implementación: System.Timers.Timer
Propósito: Polling periódico de trabajos
Ubicación: Service1.vb líneas 50-54
4.
Implementación: SyncLock en VB.NET
Propósito: Sincronización de escritura al log
Ubicación: Service1.vb líneas 185-190
5.
Factory Pattern (Implícito)Implementación: CLogic.Trabajo(tipo) con enum de tipos
Propósito: Creación dinámica de procesadores de trabajo
Ubicación: Service1.vb línea 129
6.
Implementación: EjecutaEnLinea() en CLogic
Propósito: Definir esqueleto de procesamiento de reportes
Ubicación: Referenciado en Service1.vb línea 136
5.4 Seguridad#
Autenticación#
SQL Server Authentication: Usuario/contraseña en connection string
Usuario de servicio: olympus_cserver
Base de datos: AndromedaDB en servidor sql.prod
Autorización#
No implementa autorización a nivel de aplicación
Seguridad delegada al nivel de SQL Server
Permisos del servicio de Windows según configuración del instalador
Protecciones Implementadas#
SQL Injection: ⚠️ VULNERABILIDAD DETECTADAConcatenación directa de strings en queries
Ubicación: Service1.vb líneas 71, 118, 127, 160, 175
Recomendación: Usar parámetros SQL
Try-Catch implementado en métodos críticos
SyncLock para escritura al log
ThreadPool manejado por .NET
Connection String Security: ⚠️ RIESGOContraseñas en texto plano en app.config
Recomendación: Usar cifrado de secciones de configuración
6. ANÁLISIS DE VERSIONES Y COMPATIBILIDAD#
Framework .NET#
Versión actual: .NET Framework 4.0
Fecha de lanzamiento: Abril 2010
Fecha de fin de soporte: 12 de enero de 2016
Estado: ❌ OBSOLETO Y SIN SOPORTE
Compatibilidad C#/VB.NET#
Versión del lenguaje: Visual Basic 10.0 (VB 2010)
Características modernas utilizadas:Genérics (List, Dictionary)
Lambda expressions limitadas
Compatibilidad de Sistema Operativo#
Mínimo: Windows 7 / Windows Server 2008 R2
Recomendado: Windows 10 / Windows Server 2016+
Soporte actual: Compatible con Windows 11 / Server 2022
Dependencias Obsoletas#
Ionic.Utils.Zip 1.3.0.0: Biblioteca descontinuadaReemplazo recomendado: DotNetZip 1.16+ o System.IO.Compression
7. RECOMENDACIONES DE ACTUALIZACIÓN#
7.1 Prioridad Alta 🔴#
| Componente | Versión Actual | Versión Recomendada | Motivo | Esfuerzo |
|---|
| .NET Framework | 4.0 | .NET 6.0 / .NET 8.0 (LTS) | Fin de soporte (EOL 2016), vulnerabilidades de seguridad, sin actualizaciones | Alto |
| Migración VB.NET a C# | VB.NET | C# 12.0 | VB.NET en mantenimiento, mejor ecosistema, más desarrolladores | Muy Alto |
| SQL Injection Fix | N/A | Parametrización | Vulnerabilidad crítica de seguridad (OWASP Top 10) | Medio |
| Connection String | Texto plano | Encrypted Sections / Azure Key Vault | Seguridad de credenciales | Bajo |
| Componente | Versión Actual | Versión Recomendada | Beneficio | Esfuerzo |
|---|
| Ionic.Utils.Zip | 1.3.0.0 | System.IO.Compression | Librería nativa, sin dependencias externas, mejor rendimiento | Bajo |
| Arquitectura | Windows Service | Worker Service (.NET) | Multiplataforma, mejor debugging, contenedores | Medio |
| Logging | Archivo texto | Serilog / NLog | Logging estructurado, niveles, múltiples destinos | Bajo |
| Timer Polling | 2 segundos | Hangfire / Quartz.NET | Job scheduling robusto, retry policies, dashboard | Medio |
| Data Access | ADO.NET Raw | Entity Framework Core / Dapper | Productividad, mantenibilidad, LINQ | Medio-Alto |
7.3 Prioridad Baja 🟢#
| Componente | Versión Actual | Versión Recomendada | Beneficio | Esfuerzo |
|---|
| Configuración | app.config XML | appsettings.json | Formato moderno, más legible | Bajo |
| Dependency Injection | Manual | Microsoft.Extensions.DependencyInjection | Testabilidad, desacoplamiento | Medio |
| Async/Await | ThreadPool | async/await | Código más legible, mejor manejo de recursos | Medio |
7.4 Roadmap de Actualización Recomendado#
8. MÉTRICAS DEL PROYECTO#
Estadísticas del Código#
| Métrica | Valor |
|---|
| Archivos VB.NET | 11 |
| Clases principales | 2 (Service1, Persistencia) |
| Métodos públicos | ~15 |
| Líneas de código (estimado) | ~500 |
| Dependencias externas | 1 (Ionic.Utils.Zip) |
| Proyectos referenciados | 1 (CLogic) |
| Archivos de configuración | 1 (app.config) |
9. DEUDA TÉCNICA IDENTIFICADA#
Issues Críticos 🔴#
Issues Importantes 🟡#
Mejoras Recomendadas 🟢#
10. GLOSARIO TÉCNICO#
| Término | Definición |
|---|
| Cobranza | Sistema de gestión de cobros y cartera |
| Andromeda | Nombre del sistema/plataforma principal |
| Olympus | Sistema relacionado vinculado a la base de datos |
| Trabajo | Unidad de procesamiento (job) en la cola |
| RPT | Archivo de plantilla de Crystal Reports |
| CLogic | Biblioteca de lógica de negocio compartida |
| ThreadPool | Pool de threads administrado por .NET Framework |
| id_trabajo | Identificador único de cada trabajo en la cola |
| Status | Estado del trabajo (Pendiente=1, En_Proceso, Procesado, Falla) |
NOTAS ADICIONALES#
Comentarios de Desarrollo#
El código incluye comentarios en español
Desarrollado originalmente por ECG BIS Soluciones en 2010
Última actualización significativa en 2024 (configuración de producción)
Sistema en producción con configuración de servidor: G:\Prod\Andromeda\
Entorno de Desarrollo vs. Producción#
El archivo app.config incluye configuraciones comentadas para entorno de prueba:Test: Rutas en d:\pdfs\, d:\reportes\
Producción: Rutas en G:\Prod\Andromeda\
Dependencias del Sistema#
1.
SQL Server con base de datos AndromedaDB
2.
Crystal Reports Runtime para generación de reportes
3.
Permisos del sistema de archivos para lectura/escritura en rutas configuradas
4.
Proyecto CLogic compilado y accesible
Consideraciones de Deployment#
Requiere instalación como servicio de Windows
Debe ejecutarse con credenciales que tengan:Permisos de lectura en carpeta de reportes
Permisos de escritura en carpetas de output y logs
Riesgos Operacionales#
1.
Falla de base de datos detiene todo el procesamiento
2.
Llenado de disco en carpetas de output puede causar fallos
3.
Crash del servicio pierde trabajos en proceso (no hay persistencia de estado)
4.
Falta de límites de recursos puede consumir toda la CPU/memoria del servidor
Documentación generada: 13 de diciembre de 2025
Analizado por: Claude AI (Anthropic)
Versión del documento: 1.0
Revisión recomendada: Trimestral o ante cambios arquitectónicos significativosModificado en 2025-12-13 23:41:45