il y a quelques jours j’ai posté un code similaire pour intégrer des données dans l’entête HTTP d’un requête sur un service WCF. Mon exemple était batti sur un proxy généré via Visual Sudio, voici un code permetant d’effectuer la même opération via un proxy créé manulellement via ChannelFactory.
Vb
' Création du binding Dim binding As new BasicHttpBinding() ' Création du point de terminaison du service Dim endPoint As new EndpointAddress("http://localhost:50000/MonService.svc") ' Création de la foctory qui va fabriquer le canal de communication Dim factory As new ChannelFactory(Of IServiceUtilisateurs)( _ binding, _ endPoint) ' Création du canal et retour de l'interface du service Dim proxy As IServiceUtilisateurs = factory.CreateChannel() Dim channel As IClientChannel = CType(proxy,IClientChannel) ' Création du scope sur le service pour ajout d'entêtes HTTP Dim scope As new OperationContextScope(CType(proxy,IClientChannel)) OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader( _ "Nom1", _ String.Empty, _ "Valeur1")) OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader( _ "Nom2", _ String.Empty, _ "Valeur2")) ' ...etc...
C#
// Création du binding BasicHttpBinding binding = new BasicHttpBinding(); // Création du point de terminaison du service EndpointAddress endPoint =new EndpointAddress("http://localhost:50000/MonService.svc"); // Création de la foctory qui va fabriquer le canal de communication ChannelFactory<IServiceUtilisateurs> factory = new ChannelFactory<IServiceUtilisateurs>( binding, endPoint); // Création du canal et retour de l'interface du service IServiceUtilisateurs proxy = factory.CreateChannel(); IClientChannel channel = (IClientChannel)proxy; // Création du scope sur le service pour ajout d'entêtes HTTP OperationContextScope scope = new OperationContextScope((IClientChannel)proxy ); OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader( "Nom1", String.Empty, "Valeur1")); OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader( "Nom2", String.Empty, "Valeur2")); // ...etc...
Comme vous le voyez ici l’astuce consiste à faire un cast du proxy en IClientChannel. Plutôt facile, mais encore fallait il y penser.