L'avantage de cette méthode est qu'elle est appliquée à chaque appel.
Créez une classe qui implémente IClientMessageInspector . Dans la méthode BeforeSendRequest, ajoutez votre en-tête personnalisé au message sortant. Cela pourrait ressembler à quelque chose comme ceci :
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
HttpRequestMessageProperty httpRequestMessage;
object httpRequestMessageObject;
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
{
httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
if (string.IsNullOrEmpty(httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER]))
{
httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER] = this.m_userAgent;
}
}
else
{
httpRequestMessage = new HttpRequestMessageProperty();
httpRequestMessage.Headers.Add(USER_AGENT_HTTP_HEADER, this.m_userAgent);
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
}
return null;
}
Créez ensuite un comportement de point de terminaison qui applique l'inspecteur de messages au runtime du client. Vous pouvez appliquer le comportement via un attribut ou via la configuration en utilisant un élément d'extension de comportement.
Voici un grand exemple de comment ajouter un en-tête HTTP user-agent à tous les messages de requête. Je l'utilise dans quelques-uns de mes clients. Vous pouvez également faire la même chose du côté du service en implémentant la fonction IDispatchMessageInspector .
C'est ce que vous aviez à l'esprit ?
Mise à jour : J'ai trouvé ceci liste des fonctionnalités WCF qui sont supportées par le cadre compact. Je crois que les inspecteurs de messages sont classés comme 'Channel Extensibility' qui, selon ce post, sont soutenu par le cadre compact.
0 votes
Avez-vous réussi à le faire fonctionner sur le Compact Framework ?
1 votes
Voir : blogs.msdn.microsoft.com/wsdevsol/2014/02/07/