我使用一个为我提供 IService 的 IOC 容器。在 IService 是 WCF 服务的情况下,它由通道工厂提供当 IService 位于同一台机器上时,它能够访问相同的 cookie,因此没有问题,但是一旦调用 WCF 服务,就需要发送这些 cookie。
我花了很多时间试图找到一种使用通道工厂发送 cookie 的方法,而我能找到的唯一方法是以下
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);
}
}
我使用该方法的问题是我必须知道我正在调用 WCF 服务,但情况并非总是如此。我尝试为 ChannelFactory 编写一个包装器,它在创建新服务和各种其他解决方案时打开一个新的 operationcontextscope,但没有任何效果。
有人有通过 WCF 服务发送 cookie 的经验吗?
我找到了一个涉及使用 SilverLight 的解决方案,不幸的是我没有使用 silverlight,解决方案在这里: http: //greenicicleblog.com/2009/10/27/using-the-silverlight-httpclient-in-wcf-and-still -passing-cookies/ 不幸的是标准 .net 不包含 IHttpCookieContainerManager 接口
理想情况下,我可以使用类似的东西,即我可以告诉 channelfactory 在它打开时传递一个 cookie。
如果有人有更好的方法来传递用于身份验证的令牌,那也将不胜感激。