2010-04-14 5 views
6

J'ai un service Web qui retourne le tableau binaire d'un objet. Existe-t-il un moyen plus simple de transférer ceci avec SOAP ou doit-il être contenu dans XML? Cela fonctionne, mais j'ai dû augmenter le tampon d'envoi et de réception à une grande valeur. Combien coûte trop?Transfert de données binaires via un service Web SOAP?

Transférer binaire en XML en tant que tableau semble vraiment inefficace, mais je ne vois pas comment ajouter une pièce jointe binaire en utilisant .NET.

Répondre

4

En tant que matrice? Voulez-vous dire que vous envoyez

<byte>8</byte> 
<byte>127</byte> 

etc? Si oui, alors vous pouvez certainement l'améliorer en convertissant le tableau d'octets en une chaîne hexagonale à l'avance, par exemple.

<codedArray>087F09AFBD.....</codedArray> 

Ceci est l'approche la plus courante pour envoyer des images, etc., via SOAP. Cependant, même alors, vous avez raison de le remettre en question. Vous devriez vraiment regarder d'autres protocoles de transfert plus RESTful, à mon humble avis.

+0

Oui, je pense que c'est comme ça que c'est codé. La convertir en hex est une excellente solution. – Jason

1

Eh bien, vous ne devriez vraiment pas envoyer d'informations binaires avec un webservice. Cela invalide en quelque sorte le point d'utiliser un webservice, la compatibilité. Idéalement, vous devez sérialiser votre objet en tant que xml. Cependant, si vous envoyez des informations qui sont intrinsèquement binaires, disons une image, alors vous pouvez certainement mettre cela dans la charge utile de votre message SOAP. Combien d'informations est vraiment fonction de combien de temps vous souhaitez attendre et à quelle vitesse votre réseau est. Je ne crois pas qu'il y ait de limite réelle à la taille de l'information que vous pouvez envoyer. Si c'est vraiment beaucoup (50 méga + semble être un nombre arbitrairement grand), alors vous voudrez peut-être envisager d'autres protocoles de transport comme le streaming sur une socket.

+0

Il est possible que je ne comprends pas la meilleure pratique pour transférer des informations de ma base de données sur le Web à ma demande. En utilisant SOAP, je peux utiliser LINQ sur le web et il se lie facilement aux objets de mon application. Y a-t-il un moyen plus facile de faire cela? L'objet est converti en un tableau binaire pour le stocker de manière plus efficace dans la base de données. Comme XML, c'est juste trop grand. – Jason

2

Dans le protocole HTTP, vous envoyez un message de type mime text/xml qui contient le message SOAP. Mais le protocole HTTP vous permet d'envoyer plusieurs messages, comme un Email composé par le message et les pièces jointes. C'est ce qu'on appelle "savon avec pièces jointes" http://en.wikipedia.org/wiki/SOAP_with_Attachments C'est fait avec un type mime "multipart/related".

Vérifiez que sur la façon de faire avec WCF http://msdn.microsoft.com/en-us/library/ms733742.aspx