Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article décrit les critères de choix parmi les encodeurs de messages inclus dans Windows Communication Foundation (WCF) : binaire, texte et MTOM (Message Transmission Optimization Mechanism).
Dans WCF, vous spécifiez comment transférer des données sur un réseau entre des points de terminaison à l’aide d’une liaison, qui est constituée d’une séquence d’éléments de liaison. Un encodeur de message est représenté par un élément de liaison d’encodage de message dans la pile de liaison. Une liaison inclut des éléments de liaison de protocole facultatifs, tels qu’un élément de liaison de sécurité ou une liaison de messagerie fiable, un élément de liaison d’encodage de message requis et un élément de liaison de transport requis.
L’élément de liaison d’encodage de message se trouve sous les éléments de liaison de protocole facultatifs et au-dessus de l’élément de liaison de transport requis. Sur le côté émetteur, un encodeur de message sérialise le message sortant Message et le transmet au transport. Sur le côté entrant, un encodeur de message reçoit la forme sérialisée d’un Message depuis le transport et la transmet à la couche de protocole supérieure, le cas échéant, ou à l’application, sinon.
Lorsque vous vous connectez à un client ou un serveur préexistant, vous n’avez peut-être pas le choix d’utiliser un encodage de message particulier, car vous devez encoder vos messages d’une manière attendue par l’autre côté. Toutefois, si vous écrivez un service WCF, vous pouvez exposer votre service via plusieurs points de terminaison, chacun utilisant un encodage de message différent. Cela permet aux clients de choisir le meilleur encodage pour communiquer avec votre service sur le point de terminaison qui leur convient le mieux, ainsi que de donner à vos clients la possibilité de choisir l’encodage le mieux adapté à ces derniers. L’utilisation de plusieurs points de terminaison vous permet également de combiner les avantages de différents encodages de messages avec d’autres éléments de liaison.
Encodeurs fournis par le système
WCF inclut trois encodeurs de messages, qui sont représentés par les trois classes suivantes :
TextMessageEncodingBindingElement, l’encodeur de sms prend en charge l’encodage XML brut et l’encodage SOAP. Le mode d’encodage XML brut de l’encodeur de message texte est appelé « XML ancien brut » (POX) pour le distinguer de l’encodage SOAP basé sur du texte. Pour activer POX, définissez la MessageVersion propriété sur None. Utilisez l’encodeur de sms pour interagir avec des points de terminaison non WCF.
BinaryMessageEncodingBindingElement, l’encodeur de message binaire, utilise un format binaire compact et est optimisé pour la communication WCF vers WCF, et n’est donc pas interopérable. Il s’agit également de l’encodeur le plus performant de tous les encodeurs WCF.
MtomMessageEncodingBindingElement, l’élément de liaison, spécifie l’encodage de caractères et le contrôle de version des messages pour les messages à l’aide de l’encodage MTOM. MTOM est une technologie efficace pour transmettre des données binaires dans des messages WCF. L’encodeur MTOM tente de créer un équilibre entre efficacité et interopérabilité. L’encodage MTOM transmet la plupart des données XML sous forme textuelle, mais optimise les grands blocs de données binaires en les transmettant as-is, sans conversion en texte. En termes d’efficacité, parmi les encodeurs fournis par WCF, MTOM se situe entre le texte (le plus lent) et le binaire (le plus rapide).
Comment choisir un encodeur de message
Le tableau suivant décrit les facteurs courants utilisés pour choisir un encodeur de message. Hiérarchiser les facteurs importants pour votre application, puis choisir les encodeurs de messages qui fonctionnent le mieux avec ces facteurs. Veillez à prendre en compte tous les facteurs supplémentaires non répertoriés dans ce tableau et les encodeurs de messages personnalisés qui peuvent être requis dans votre application.
| Facteur | Descriptif | Encodeurs qui prennent en charge ce facteur |
|---|---|---|
| Jeux de caractères pris en charge | TextMessageEncodingBindingElement et MtomMessageEncodingBindingElement prennent uniquement en charge les encodages Unicode UTF8 et UTF16 (big-endian et little-endian). Si d’autres encodages sont requis, tels que UTF7 ou ASCII, un encodeur personnalisé doit être utilisé. Pour obtenir un exemple d’encodeur personnalisé, consultez l’encodeur de message personnalisé. | Texto |
| Inspection | L’inspection est la possibilité d’examiner les messages pendant la transmission. Les encodages de texte, avec ou sans utilisation de SOAP, permettent aux messages d’être inspectés et analysés par de nombreuses applications sans utiliser d’outils spécialisés. L’utilisation de la sécurité de transfert, au niveau du message ou du transport, affecte votre capacité à inspecter les messages. La confidentialité protège un message contre l’examen et l’intégrité protège un message contre la modification. | Texto |
| Fiabilité | La fiabilité est la résilience d’un encodeur pour les erreurs de transmission. La fiabilité peut également être fournie au niveau du message, du transport ou de la couche application. Tous les encodeurs WCF standard supposent qu’une autre couche fournit une fiabilité. L’encodeur a peu de possibilité de récupérer à partir d’une erreur de transmission. | Aucun |
| Simplicité | La simplicité représente la facilité avec laquelle vous pouvez créer des encodeurs et des décodeurs pour une spécification d’encodage. Les encodages de texte sont particulièrement avantageux en termes de simplicité, et l'encodage de texte POX présente l'avantage supplémentaire de ne pas nécessiter de support pour le traitement SOAP. | Texte (POX) |
| Taille | L’encodage détermine la quantité de surcharge imposée au contenu. La taille des messages encodés est directement liée au débit maximal des opérations de service. Les encodages binaires sont généralement plus compacts que les encodages de texte. Lorsque la taille du message est premium, envisagez également de compresser le contenu du message pendant l’encodage. Toutefois, la compression ajoute des coûts de traitement pour l’expéditeur et le destinataire du message. | Binaire |
| Diffusion en continu | La diffusion en continu permet aux applications de commencer à traiter un message avant l’arrivée du message entier. L’utilisation efficace de la diffusion en continu nécessite que les données importantes d’un message soient disponibles au début du message afin que l’application de réception ne soit pas tenue d’attendre qu’elle arrive. En outre, les applications qui utilisent le transfert en continu doivent organiser les données dans le message de manière incrémentielle afin que le contenu n’ait pas de dépendances de transfert. Dans de nombreux cas, vous devez trouver un compromis entre la diffusion en continu du contenu et la plus petite taille de transfert possible pour ce contenu. | Aucun |
| Prise en charge des outils tiers | Les zones de prise en charge d’un encodage incluent le développement et le diagnostic. Les développeurs tiers ont investi dans les bibliothèques et les boîtes à outils pour gérer les messages encodés au format POX. | Texte (POX) |
| Interopérabilité | Ce facteur fait référence à la capacité d’un encodeur WCF à interagir avec des services non WCF. | Texto MTOM (partiel) |
Remarque : Lors de l’utilisation de l’encodeur binaire, l’utilisation du paramètre IgnoreWhitespace lors de la création d’un XMLReader n’aura aucun effet. Par exemple, si vous effectuez les opérations suivantes dans une opération de service :
public void OperationContract(XElement input)
{
Console.WriteLine("{0}", input.Value);
int counter = 0;
var xreader = input.CreateReader();
var reader = XmlReader.Create(xreader, new XmlReaderSettings() { IgnoreWhitespace = true });
while (reader.Read())
{
counter++;
}
Console.WriteLine("Read {0} lines with reader", counter);
}
Le paramètre IgnoreWhitespace est ignoré.
Compression et encodeur binaire
À compter de WCF 4.5, l’encodeur binaire WCF ajoute la prise en charge de la compression. Cela vous permet d’utiliser l’algorithme gzip/deflate pour envoyer des messages compressés à partir d’un client WCF et répondre également avec des messages compressés à partir d’un service WCF auto-hébergé. Cette fonctionnalité permet la compression sur les transports HTTP et TCP. Un service WCF hébergé par IIS peut toujours être activé pour envoyer des réponses compressées en configurant le serveur hôte IIS. Le type de compression est configuré avec la BinaryMessageEncodingBindingElement.CompressionFormat propriété. Cette propriété est définie sur l’une des System.ServiceModel.Channels.CompressionFormat valeurs d’énumération :
Étant donné que cette propriété n’est exposée que sur binaryMessageEncodingBindingElement, vous devez créer une liaison personnalisée comme celle-ci pour utiliser cette fonctionnalité :
<customBinding>
<binding name="BinaryCompressionBinding">
<binaryMessageEncoding compressionFormat ="GZip" />
<httpTransport />
</binding>
</customBinding>
Le client et le service doivent accepter d’envoyer et de recevoir des messages compressés. Par conséquent, la propriété compressionFormat doit être configurée sur l’élément binaryMessageEncoding sur le client et le service. Une exception ProtocolException est levée si le service ou le client n’est pas configuré pour la compression, mais l'autre partie l'est. L’activation de la compression doit être soigneusement étudiée. La compression est principalement utile si la bande passante réseau est un goulot d’étranglement. Dans le cas où le processeur est le goulot d’étranglement, la compression diminue le débit. Les tests appropriés doivent être effectués dans un environnement simulé pour déterminer si cela profite à l’application