2009-08-22 6 views
0

J'écris un programme .dll C/C++ natif qui appelle les fonctions .dll de nombreuses bibliothèques C/C++ tierces et renvoie un tableau de structure (SA) ac/C++ de 18 colonnes de 0-n lignes. Cette valeur renvoyée est ensuite capturée par un programme de service Web WCF C# qui "interagit" avec mon fichier .dll et, en utilisant la bibliothèque .net xml, sérialise le résultat avant d'envoyer le message au client du service Web.Retour d'un tableau de structure C/C++ au format XML/XSD

Je peux voir un overhead ici: (a) préparer des données en C/C++ pour peupler le SA avant de retourner et, (b) sérialiser cette SA en XML une fois qu'il est reçu par le programme de service web C# Pour éviter cette surcharge, je pense qu'au lieu de remplir la SA dans ma DLL C/C++, je devrais remplir une chaîne ou un fichier XML-sérialisé, puis renvoyer ce résultat au programme de service Web C# qui enverra uniquement le données déjà sérialisées directement au client.

À ce stade, je voudrais savoir:

1) Si ma pensée est correcte.

2) Si oui, en plus de remplir les données en XML, je voudrais aussi inclure - en entête - le nom des colonnes, des longueurs et des types de données. Quelqu'un m'a dit que je devais créer une chaîne/un fichier XSD pour décrire cet en-tête. Que penses-tu de cela?

3) Quel genre de choses dois-je considérer dans le programme C# pour ne pas avoir de problèmes avec les données XML retournées? Données XSD?

Merci de votre courtoisie en lisant ceci.

Répondre

0

XSD (XML Schema) est surtout utile pour valider et décrire des formats XML. Ce n'est pas quelque chose que vous passez habituellement dans mon expérience, souvent les points d'extrémité ont déjà le schéma à portée de main. Si vous avez le contrôle sur les deux applications, ce que je suppose que vous faites, vous pouvez omettre cela et simplement aller avec le XML.

Vous pouvez toutefois avoir le schéma dans votre code C# et valider le code XML de la partie C++, si pour une raison quelconque, vous ne lui faites pas confiance. Aussi si vous allez remettre ce XML à un tiers, un schéma peut également être utile.

L'encodage de caractères est l'un des problèmes que vous pourriez rencontrer. Vous devez vous assurer que votre XML est utf-8 (ou quelque chose d'autre si vous avez défini l'attribut de codage dans la déclaration XML en conséquence, mais utf-8 est par défaut) lorsque vous le passez au client. Cela pourrait être fait dans la partie C++, ou probablement plus facile dans la partie C#.

Je pense que vous avez raison de dire qu'il y a une étape inutile, mais peut-être est-il utile de considérer si vous voulez utiliser les données de la partie C++ dans une autre forme que XML. Il se peut que le format que vous avez déjà est utile dans ces circonstances.


I inclus un exemple de schéma pour vous, chaque ligne a un nom, la longueur et le type:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="row-column-format"> 
    <xs:element name="rows"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="column"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
       <xs:attribute name="name" type="xs:string" /> 
       <xs:attribute name="type" type="xs:string" /> 
       <xs:attribute name="length" type="xs:int" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Il décrit un format XML de cette structure:

<?xml version="1.0" encoding="utf-8"?> 
<rows xmlns="row-column-format"> 
    <column name="name1" type="type1" length="1" xmlns="">column1</column> 
</rows>