6
votes

Comment ajouter l'attribut à l'en-tête de message WCF avec la méthode Messageheader.Createheader ()?

J'ajoute un en-tête personnalisé WCF avec le code suivant xxx

avec ceci, je souhaite également ajouter xxx

comme attribut à cet en-tête de message.

existe-t-il un moyen d'ajouter un espace de noms ci-dessus et d'attribuer à l'en-tête de message?


0 commentaires

3 Réponses :


0
votes

Définissez une classe XMLSerializable qui sertiale au format XML Element que vous souhaitez pour votre en-tête. Ensuite, passez une instance de cette classe en tant que paramètre valeur de MessageHeader.createheader .


0 commentaires

8
votes

J'ai trouvé une solution. Nous devons mettre en œuvre l'en-tête Custome, qui est introuvable de la classe de messagerie.

La classe de messagerie de messagerie a une méthode ONWRITESTARTHeader () . Nous pouvons ajouter des espaces de noms XML dans cette méthode.

De plus, nous devons remplacer la méthode Onriteheadercontents () et écrire XML ou Valeur que nous voulons comme message de messagerie.

Une fois que cela est prêt lors de l'ajout de l'en-tête de message dans demande.Header.add () Objet Pass de notre classe d'en-tête personnalisée.

Reportez-vous après des liens plus de détails.

http: // www.netframeworkDev.com/windows-communication-foundation/MessageHeader-Serializer-how-a-utilisation-atributes-52827.shtml

http: // social.msdn.microsoft.com/forums/en-us/wfcf/thread/c2a39df8-3943-4c41-acca-6da8e96f0dff


0 commentaires

0
votes

Si vous utilisez la classe Adressheader, il ajoute automatiquement l'attribut IsreferenceParameter. La méthode d'extension suivante à la canalyse de canalisation ferait ce que vous vouliez.

public static void AddHeader<T>(this ChannelFactory<T> factory, string headerName, string value, string nameSpace)
{
    var endpointAddressBuilder = new EndpointAddressBuilder(factory.Endpoint.Address);
    endpointAddressBuilder.Headers.Add(AddressHeader.CreateAddressHeader(headerName, nameSpace, value));

    factory.Endpoint.Address = endpointAddressBuilder.ToEndpointAddress();
}


0 commentaires