J'utilise un conteneur IOC qui me fournit IService. Dans le cas où IService est un service WCF, il est fourni par une fabrique de canaux Lorsque IService réside sur la même machine, il peut accéder aux mêmes cookies et donc aucun problème. Cependant, une fois qu'un service WCF est appelé, il doit être envoyé. biscuits.Envoi de cookies via WCF à l'aide de ChannelFactory
J'ai passé beaucoup de temps à essayer de trouver un moyen d'envoyer des cookies à l'aide d'une usine de canal et la seule façon que je pouvais trouver qui fonctionne est la suivante
var cookie = _authenticationClient.GetHttpCookie();
HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers.Add(HttpRequestHeader.Cookie, cookie.Name + "=" + cookie.Value);
using(var scope = new OperationContextScope((IClientChannel)_service))
{
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
var result = _service.Add(details);
if (result.Result == RPGResult.Success)
{
return RedirectToAction("Index", "Home", result.Id);
}
}
Le problème avec moi en utilisant cette méthode c'est que je dois savoir que j'appelle un service WCF ce qui n'est pas toujours le cas. J'ai essayé d'écrire un wrapper pour le ChannelFactory qui ouvre une nouvelle opérationcontextscope quand il crée un nouveau service et diverses autres solutions mais rien n'a fonctionné.
Quelqu'un a-t-il de l'expérience avec l'envoi de cookies sur les services WCF?
J'ai trouvé une solution impliquant l'utilisation SilverLight, malheureusement, je ne suis pas en utilisant silverlight, la solution est ici: http://greenicicleblog.com/2009/10/27/using-the-silverlight-httpclient-in-wcf-and-still-passing-cookies/ .net Malheureusement standard ne contient pas l'interface IHttpCookieContainerManager
Idéalement je serais en mesure d'utiliser quelque chose similaire, à savoir Je serais en mesure de dire au channelfactory de passer un cookie à chaque ouverture.
Si quelqu'un a un meilleur moyen de passer un jeton qui est utilisé pour l'authentification qui serait apprécié aussi.