IRONSOFTWAREHOME
VIDÉOS

Passer de l'API Cloudmersive Barcode à IronBarcode

Curtis Chau
Curtis Chau
Updated: 19 mai 2026

Il s'agit de la migration la plus simple de toute l'histoire des codes-barres .NET . Supprimez le client HTTP. Ajoutez un package NuGet . Supprimez la gestion des clés API. Le reste consiste à effectuer des opérations de recherche et de remplacement.

Le SDK .NET de Cloudmersive est un client API REST généré — une fine couche d'abstraction autour des appels HttpClient. Chaque portion de code spécifique à Cloudmersive dans votre application correspond soit à une configuration pour ce client, soit à des appels via ce client, soit à la gestion des erreurs en cas d'échec des requêtes réseau. IronBarcode, qui traite les codes-barres localement sans dépendance au réseau, ne nécessite aucune infrastructure de ce type.


Démarrage rapide : trois étapes

Étape 1 : Échanger les paquets

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

Étape 2 : Remplacer les espaces de noms

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

// Add this
using IronBarCode;

Étape 3 : Remplacez la clé API par la clé de licence.

// 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";

Dans une application ASP.NET Core, la clé de licence se place dans Program.cs avant builder.Build() :

using IronBarCode;

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

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

Coût : Comparaison de vos dépenses actuelles et de vos dépenses futures

Avant de procéder à la migration, il est judicieux de calculer le coût réel de l'intégration Cloudmersive. Le calcul est simple :

Votre volume quotidienDemandes mensuellesNiveau CloudmersiveIronBarcode (à usage unique)
100/jour~3 000Basic 19,99 $/mois$999
1 000/jour~30 000Business Premier 99,99 $/mois$999
5 000/jour~150 000Medium Business 499,99 $/mois$999
10 000/jour~300 000Enterprise (sur mesure)$999
25 000/jour~750 000Enterprise (sur mesure)1 499 $ (Plus, 3 développeurs)

Si vous payez plus de ~63 $/mois pour Cloudmersive, la licence Lite d'IronBarcode est rentabilisée dès la première année. Après le seuil de rentabilité, IronBarcode est une licence perpétuelle sans renouvellement et sans frais par demande.


Exemples de migration de code

Génération de codes QR

L'appel de génération Cloudmersive le plus courant correspond directement à IronBarcode:

Avant (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);

Aprè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");

Génération Code128

Avant (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);

Aprè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();

Lecture de codes-barres

Avant (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}");
    }
}

Aprè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}");

Lecture asynchrone des codes-barres

Si votre intégration Cloudmersive utilise l'API asynchrone :

Avant (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;
}

Aprè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;

Lecture des codes-barres à partir d'un PDF

Cloudmersive ne prend pas en charge nativement le format PDF. Si votre code actuel extrait des images des PDF avant la numérisation, remplacez l'ensemble de ce processus par un seul appel à IronBarcode :

Avant (Cloudmersive — nécessite une extraction PDF séparée) :

// 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}");
    }
}

Aprè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}");
}

Détection de plusieurs codes-barres

Si vous disposez d'un code permettant de scanner des documents comportant plusieurs codes-barres :

Avant (Cloudmersive — plusieurs appels requis) :

// 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);
}

Aprè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();

Suppression des infrastructures devenues inutiles

C'est la partie de la migration où l'on supprime plus de code qu'on n'en écrit.

Supprimer la gestion des exceptions HTTP

Les opérations Cloudmersive peuvent échouer en raison d'erreurs réseau, de réponses HTTP 4xx/5xx et d'exceptions de délai d'attente. Cela génère généralement une infrastructure try/catch dont IronBarcode n'a pas besoin :

// 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 ne génère pas d'exceptions réseau. Il lance BarcodeException si un code-barres ne peut pas être décodé à partir de l'entrée, ce qui est un problème de contenu plutôt qu'un problème d'infrastructure. Gestion simplifiée des erreurs :

using IronBarCode;

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

Supprimer la logique de nouvelle tentative

Si votre intégration Cloudmersive inclut des politiques de nouvelle tentative (Polly, boucles de nouvelle tentative personnalisées ou délai exponentiel), supprimez-les complètement :

// 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");

Supprimer le suivi des limites de débit

Si votre code effectue un suivi du nombre d'appels API pour rester dans les limites du quota mensuel 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");

Supprimer la configuration du délai d'expiration du réseau

Les clients Cloudmersive incluent souvent une configuration de délai d'expiration. Supprimez-le :

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

// IronBarcode has no network timeout — no network

Suppression de la rotation des clés API

Si votre application fait tourner les clés API selon un calendrier prédéfini ou les stocke dans un système de gestion des secrets :

// 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"

Problèmes de migration courants

Cloudmersive a retourné byte[] pour la génération

Les méthodes de génération de Cloudmersive retournent byte[] directement. IronBarcode retourne un objet GeneratedBarcode qui vous offre plus d'options :

// 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 a renvoyé un modèle de réponse JSON

Le résultat de l'analyse de Cloudmersive est un modèle de réponse avec des propriétés telles que Successful, RawText et BarcodeType. IronBarcode renvoie des objets de résultat typés :

// 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();
}

Plusieurs types d'instances d'API Cloudmersive

Cloudmersive sépare la génération et l'analyse en instances GenerateBarcodeApi et BarcodeScanApi. IronBarcode utilise des classes statiques — aucune instance n'est nécessaire :

// 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

Liste de contrôle de la migration

Exécutez ces recherches dans votre code source avant et après la migration pour vérifier que vous avez bien détecté toutes les références à 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

Après la migration, toutes les recherches devraient renvoyer zéro résultat. Vérifiez ensuite que IronBarcode est correctement référencé :

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

Liste de vérification de configuration

  • Supprimer Cloudmersive.APIClient.NET.Barcode de tous les fichiers .csproj
  • Supprimer la clé API Cloudmersive de appsettings.json, des variables d'environnement et des magasins de secrets
  • Ajouter le package NuGet IronBarcode
  • Ajouter l'initialisation de IronBarCode.License.LicenseKey au démarrage de l'application
  • Supprimer les politiques de nouvelle tentative et les disjoncteurs pour les appels Cloudmersive
  • Supprimer le code de suivi de la limite de débit
  • Supprimer la configuration de délai d'attente réseau

Liste de contrôle des tests

Une fois la migration terminée :

  • Vérifier que la génération du code QR produit un résultat valide et scannable
  • Vérifier la génération de codes-barres linéaires Code128 et autres codes-barres.
  • Vérifier la lecture des codes-barres à partir des formats d'image courants (PNG, JPEG, BMP)
  • Testez la lecture des PDF si vous traitez des documents PDF.
  • Tester la détection de plusieurs codes-barres, le cas échéant.
  • Vérifier qu'aucun appel d'API Cloudmersive n'apparaît dans le trafic réseau
  • Vérifiez que l'application fonctionne correctement sans connexion Internet.

Ce que vous gagnez après la migration

Au-delà des économies réalisées, la migration élimine toute une catégorie de problèmes opérationnels :

Le traitement des codes-barres dépend désormais du réseau. Votre flux de traitement documentaire fonctionne indépendamment de la disponibilité de Cloudmersive, de la qualité de votre connexion Internet ou des pics de latence du réseau.

Finie la gestion des quotas. Les pics de volume de documents en fin de mois n'entraînent plus de dépassements imprévus ni d'erreurs de traitement.

Plus aucune donnée ne quitte votre réseau. Les images de codes-barres contenant des informations sensibles sur vos clients, vos données financières ou de santé restent sur votre infrastructure.

Un code plus simple. L'infrastructure de nouvelle tentative, la gestion des délais d'attente et la gestion des exceptions HTTP requises par les intégrations Cloudmersive en production ont disparu. Ce qui le remplace, c'est un appel de méthode direct.

La migration est mécanique. Les avantages sont structurels : ils permettent d'éliminer la dépendance à un service réseau externe pour un flux de travail qui n'en a pas besoin.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise