IRONSOFTWAREHOME
VIDEOS

Migrating from Cloudmersive Barcode API to IronBarcode

Curtis Chau
Curtis Chau
Updated: 19 de mayo de 2026

Esta es la migración más sencilla en la historia de los códigos de barras de .NET . Elimine el cliente HTTP. Agregue un paquete NuGet . Eliminar la gestión de claves API. El resto es cuestión de buscar y reemplazar.

El SDK .NET de Cloudmersive es un cliente API REST generado, una envoltura delgada alrededor de las llamadas HttpClient. Cada fragmento de código específico de Cloudmersive en su aplicación es o bien configuración para ese cliente, llamadas a través de ese cliente, o bien manejo de errores para lo que sucede cuando fallan las solicitudes de red. Con IronBarcode no se necesita ninguna de esas infraestructuras, ya que procesa los códigos de barras localmente sin depender de la red.


Inicio rápido: Tres pasos

Paso 1: Intercambiar los paquetes

dotnet remove package Cloudmersive.APIClient.NET.Barcode
dotnet add package BarCode
SHELL

Paso 2: Reemplazar espacios de nombres

// Remove these
using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;

// Add this
using IronBarCode;

Paso 3: Reemplace la configuración de la clave API con la clave de licencia.

// Remove this
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");

// Replace with this — set once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

En una aplicación ASP.NET Core, la clave de licencia va en Program.cs antes de builder.Build():

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var builder = WebApplication.CreateBuilder(args);
// ... rest of startup

Costo: Lo que gastabas vs. Lo que gastarás

Antes de migrar, conviene calcular el coste real de la integración con Cloudmersive. Las matemáticas son sencillas:

Tu volumen diarioSolicitudes mensualesNivel CloudmersiveIronBarcode (un solo uso)
100/día~3.000Básico $19.99/mes$999
1.000/día~30.000Business Premier $99.99/mes$999
5.000/día~150.000Mediana Empresa $499.99/mes$999
10.000/día~300.000Enterprise (personalizado)$999
25.000/día~750.000Enterprise (personalizado)$1,499 (Más 3 desarrolladores)

Si está pagando más de ~$63/mes por Cloudmersive, la licencia Lite de IronBarcode se paga sola dentro del primer año. Después del punto de equilibrio, IronBarcode es una licencia perpetua sin renovaciones y sin cargos por solicitud.


Ejemplos de migración de código

Generación de códigos QR

La llamada de generación más común de Cloudmersive se corresponde directamente con IronBarcode:

Antes (Cloudmersive):

using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;

Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");

var apiInstance = new GenerateBarcodeApi();

byte[] result = apiInstance.GenerateBarcodeQRCode("https://example.com");
File.WriteAllBytes("qr.png", result);

Después (IronBarcode):

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

byte[] result = QRCodeWriter.CreateQrCode("https://example.com", 500)
    .ToPngBinaryData();
File.WriteAllBytes("qr.png", result);

// Or save directly
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

Generación de código 128

Antes (Cloudmersive):

using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;

Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var apiInstance = new GenerateBarcodeApi();

byte[] result = apiInstance.GenerateBarcodeCode128("SHIP-2024031500428");
File.WriteAllBytes("barcode.png", result);

Después (IronBarcode):

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// Or get bytes directly
byte[] result = BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128)
    .ToPngBinaryData();

Lectura de códigos de barras

Antes (Cloudmersive):

using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;

Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var scanApi = new BarcodeScanApi();

using (var stream = File.OpenRead("barcode.png"))
{
    var result = scanApi.BarcodeScanImage(stream);
    if (result.Successful == true)
    {
        Console.WriteLine($"Value: {result.RawText}");
        Console.WriteLine($"Type: {result.BarcodeType}");
    }
}

Después (IronBarcode):

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var results = BarcodeReader.Read("barcode.png");
var result = results.First();
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Type: {result.Format}");

Lectura asíncrona de códigos de barras

Si su integración con Cloudmersive utiliza la API asíncrona:

Antes (Cloudmersive):

using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;

Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var scanApi = new BarcodeScanApi();

using (var stream = File.OpenRead("barcode.png"))
{
    var result = await scanApi.BarcodeScanImageAsync(stream);
    return result.Successful == true ? result.RawText : null;
}

Después (IronBarcode):

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// IronBarcode is synchronous; wrap in Task.Run to free the calling thread for CPU-bound work
var results = await Task.Run(() => BarcodeReader.Read("barcode.png"));
return results.FirstOrDefault()?.Value;

Lectura de códigos de barras desde PDF

Cloudmersive no tiene soporte nativo para PDF. Si su código actual extrae imágenes de archivos PDF antes de escanearlos, reemplace todo ese proceso con una sola llamada a IronBarcode :

Antes (Cloudmersive: requiere extracción de PDF por separado):

// Requires a separate PDF library to extract pages as images,
// then one Cloudmersive API call per extracted page image.
var scanApi = new BarcodeScanApi();
foreach (var pageImagePath in ExtractPdfPages("document.pdf"))
{
    using var stream = File.OpenRead(pageImagePath);
    var result = await scanApi.BarcodeScanImageAsync(stream);
    if (result.Successful == true)
    {
        Console.WriteLine($"Found: {result.RawText}");
    }
}

Después (IronBarcode):

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// One call — all pages, all barcodes, no image extraction step
var results = BarcodeReader.Read("document.pdf");
foreach (var result in results)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

Detección de múltiples códigos de barras

Si dispone de un código que escanea documentos con múltiples códigos de barras:

Antes (Cloudmersive: se requieren varias llamadas):

// Cloudmersive returns one barcode per scan — multiple calls for multiple barcodes
var scanApi = new BarcodeScanApi();
var barcodeValues = new List<string>();

foreach (var croppedRegion in CropBarcodeRegions("invoice.png"))
{
    using var stream = new MemoryStream(croppedRegion);
    var result = await scanApi.BarcodeScanImageAsync(stream);
    if (result.Successful == true)
        barcodeValues.Add(result.RawText);
}

Después (IronBarcode):

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
};

// One call — returns all barcodes in the image
var results = BarcodeReader.Read("invoice.png", options);
var barcodeValues = results.Select(r => r.Value).ToList();

Eliminación de infraestructuras innecesarias

Esta es la parte de la migración en la que se elimina más código del que se escribe.

Eliminar el manejo de excepciones HTTP

Las operaciones de Cloudmersive pueden fallar debido a errores de red, respuestas HTTP 4xx/5xx y excepciones de tiempo de espera. Esto suele generar una infraestructura try/catch que IronBarcode no necesita:

// Remove all of this
try
{
    var result = await scanApi.BarcodeScanImageAsync(stream);
    // ...
}
catch (ApiException ex) when (ex.ErrorCode == 429)
{
    // Rate limited — wait and retry
    await Task.Delay(TimeSpan.FromSeconds(2));
    // retry logic...
}
catch (ApiException ex) when (ex.ErrorCode == 503)
{
    // Service unavailable — Cloudmersive is down
    _logger.LogError("Cloudmersive unavailable: {Message}", ex.Message);
    throw;
}
catch (HttpRequestException ex)
{
    // Network error
    _logger.LogError("Network failure: {Message}", ex.Message);
    throw;
}
catch (TaskCanceledException)
{
    // Timeout
    _logger.LogError("Cloudmersive request timed out");
    throw;
}

IronBarcode no genera excepciones de red. Lanza BarcodeException si un código de barras no se puede decodificar de la entrada, lo cual es un problema de contenido en lugar de un problema de infraestructura. Manejo de errores simplificado:

using IronBarCode;

var results = BarcodeReader.Read("barcode.png");
if (!results.Any())
{
    _logger.LogWarning("No barcode detected in image");
}

Eliminar la lógica de reintento

Si tu integración con Cloudmersive incluye políticas de reintento (Polly, bucles de reintento personalizados o retroceso exponencial), elimínalas por completo:

// Remove retry infrastructure
// var retryPolicy = Policy
//     .Handle<ApiException>()
//     .WaitAndRetryAsync(3, retryAttempt =>
//         TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));

// IronBarcode — no retry needed
var results = BarcodeReader.Read("barcode.png");

Eliminar el seguimiento de límites de velocidad

Si tu código realiza un seguimiento del número de llamadas a la API para mantenerse dentro de la cuota mensual de Cloudmersive:

// Remove quota tracking
// private static int _monthlyCallCount = 0;
// private const int MonthlyLimit = 30000;
//
// if (Interlocked.Increment(ref _monthlyCallCount) > MonthlyLimit)
//     throw new InvalidOperationException("Monthly Cloudmersive quota exceeded");

// IronBarcode — no quota
var results = BarcodeReader.Read("barcode.png");

Eliminar la configuración de tiempo de espera de red

Los clientes de Cloudmersive suelen incluir configuración de tiempo de espera. Elimínalo:

// Remove timeout configuration
// Configuration.Default.Timeout = 30000; // 30 second timeout
// Configuration.Default.ConnectionTimeout = 5000;

// IronBarcode has no network timeout — no network

Eliminar la rotación de claves API

Si su aplicación rota las claves API según un cronograma o las almacena en un sistema de gestión de secretos:

// Simplify this pattern
// private string GetCloudmersiveApiKey() =>
//     _secretManager.GetSecret("cloudmersive-api-key-current");
//
// Configuration.Default.ApiKey["Apikey"] = GetCloudmersiveApiKey();

// IronBarcode — set once at startup
IronBarCode.License.LicenseKey = _configuration["IronBarcode:LicenseKey"];
// or literal: "YOUR-LICENSE-KEY"

Problemas comunes de migración

Cloudmersive Devolvió byte[] para la Generación

Los métodos de generación de Cloudmersive devuelven byte[] directamente. IronBarcode devuelve un objeto GeneratedBarcode que te ofrece más opciones:

// Cloudmersive returned byte[] directly
byte[] cloudmersiveResult = apiInstance.GenerateBarcodeQRCode("data");

// IronBarcode — call ToPngBinaryData() for the equivalent byte[]
byte[] ironBarcodeResult = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

// Or save directly (often simpler)
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode)
    .SaveAsPng("output.png");

// Or get other formats
byte[] jpegBytes = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode)
    .ToJpegBinaryData();

Cloudmersive Reading devolvió un modelo de respuesta JSON.

El resultado del escaneo de Cloudmersive es un modelo de respuesta con propiedades como Successful, RawText y BarcodeType. IronBarcode devuelve objetos de resultado tipificados:

// Cloudmersive result model
if (cloudmersiveResult.Successful == true)
{
    string value = cloudmersiveResult.RawText;
    string type = cloudmersiveResult.BarcodeType;
}

// IronBarcode result — use .Value and .Format directly
var results = BarcodeReader.Read("barcode.png");
if (results.Any())
{
    string value = results.First().Value;
    string format = results.First().Format.ToString();
}

Múltiples tipos de instancias de API de Cloudmersive

Cloudmersive separa la generación y el escaneo en instancias GenerateBarcodeApi y BarcodeScanApi. IronBarcode utiliza clases estáticas; no se necesitan instancias:

// Cloudmersive — two separate API instances
var generateApi = new GenerateBarcodeApi();
var scanApi = new BarcodeScanApi();

// IronBarcode — static, no instances
// BarcodeWriter for generation
// BarcodeReader for reading
// QRCodeWriter for QR codes specifically

Lista de comprobación de la migración

Ejecuta estas búsquedas en tu código fuente antes y después de la migración para verificar que hayas detectado todas las referencias a Cloudmersive:

# Find all Cloudmersive references
grep -r "Cloudmersive" --include="*.cs" .
grep -r "GenerateBarcodeApi" --include="*.cs" .
grep -r "BarcodeScanApi" --include="*.cs" .
grep -r "Configuration.Default.ApiKey" --include="*.cs" .
grep -r '"Apikey"' --include="*.cs" .
grep -r "GenerateBarcodeQRCode" --include="*.cs" .
grep -r "GenerateBarcodeCode128" --include="*.cs" .
grep -r "BarcodeScanImage" --include="*.cs" .
grep -r "cloudmersive" --include="*.csproj" .
grep -r "cloudmersive" --include="*.json" .
SHELL

Tras la migración, todas las búsquedas deberían arrojar resultados cero. Luego, verifique que IronBarcode esté referenciado correctamente:

grep -r "IronBarCode" --include="*.cs" .
grep -r "BarcodeReader" --include="*.cs" .
grep -r "BarcodeWriter" --include="*.cs" .
SHELL

Lista de verificación de configuración

  • Retira Cloudmersive.APIClient.NET.Barcode de todos los archivos .csproj
  • Retira la clave API de Cloudmersive de appsettings.json, variables de entorno y almacenes secretos
  • Agregar el paquete NuGet IronBarcode
  • Agrega la inicialización de IronBarCode.License.LicenseKey al inicio de la aplicación
  • Eliminar las políticas de reintento y los disyuntores para las llamadas de Cloudmersive
  • Eliminar el código de seguimiento del límite de velocidad
  • Eliminar la configuración de tiempo de espera de red

Lista de verificación de pruebas

Una vez completada la migración:

  • Verificar que la generación del código QR produzca una salida válida y escaneable.
  • Verificar la generación de códigos de barras Code128 y otros códigos de barras lineales.
  • Verificar la lectura de códigos de barras a partir de formatos de imagen comunes (PNG, JPEG, BMP).
  • Pruebe la lectura de PDF si procesa documentos PDF.
  • Pruebe la detección de múltiples códigos de barras si corresponde.
  • Confirme que no aparecen llamadas a la API de Cloudmersive en el tráfico de red.
  • Confirma que la aplicación funciona correctamente sin conexión a internet.

Lo que se gana tras la migración

Más allá del ahorro de costes, la migración elimina toda una serie de problemas operativos:

Se acabó el procesamiento de códigos de barras dependiente de la red. Su flujo de procesamiento de documentos funciona independientemente de la disponibilidad de Cloudmersive, la calidad de su conexión a Internet o los picos de latencia de la red.

Se acabó la gestión de cuotas. Los picos de volumen de documentos a fin de mes no generan sobrecostos inesperados ni fallos en el procesamiento.

No más datos que salgan de su red. Las imágenes de códigos de barras que contienen información confidencial de clientes, financiera o de salud permanecen en su infraestructura.

Código más sencillo. Se ha eliminado la infraestructura de reintentos, el manejo de tiempos de espera y la gestión de excepciones HTTP que requieren las integraciones de Cloudmersive en producción. Lo que lo reemplaza es una llamada directa a un método.

La migración es mecánica. Las ventajas son estructurales: se elimina la dependencia de un servicio de red externo en un flujo de trabajo que no lo necesita.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta