我有一个 WPF 客户端,它使用 WCF 调用 IIS 中托管的服务。我的 WCF 客户端具有 AllowCookies='true' 以便 IIS 正在使用的表单身份验证 cookie 自动与每个 WCF 调用一起来回传递。这一切都很好。
但是我需要能够清除我的 WCF 客户端正在缓存的任何表单身份验证 cookie,以便我的下一个请求不会经过身份验证。有没有办法做到这一点?
我有一个 WPF 客户端,它使用 WCF 调用 IIS 中托管的服务。我的 WCF 客户端具有 AllowCookies='true' 以便 IIS 正在使用的表单身份验证 cookie 自动与每个 WCF 调用一起来回传递。这一切都很好。
但是我需要能够清除我的 WCF 客户端正在缓存的任何表单身份验证 cookie,以便我的下一个请求不会经过身份验证。有没有办法做到这一点?
在 wcf 客户端上,您可以访问
HttpContext.Current.Request
现在这个 Request 对象包含 cookie。您可以遍历 cookie 集合并删除您需要的那个。
foreach(var cookie in request.Cookies) { // }
代码项目中的一篇优秀文章,解释了 WCF 客户端上的 cookie 管理
更新
HttpContext 仅在服务器端可用,因此 Phil 指出我之前的答案不正确。
正确的方法会很笨拙,因为您已经掌握了 HttpRequest 本身
MyWebServiceClient client = new MyWebServiceClient();
using ( new OperationContextScope( client.InnerChannel ) )
{
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
//get the instance of your AuthCookie and make it blank
request.Headers["AuthCookie"] = "";
OperationContext.Current.OutgoingMessageProperties[
HttpRequestMessageProperty.Name] = request;
client.InvokeSomeMethod();
}
在这里找到了这个例子