调用WCF webservice时清空HttpContext

时间:2008-11-10 22:50:09

标签: wcf silverlight web-services

我最近编写了一个与Silverlight一起使用的Web服务,它使用ASP.net成员资格和角色。

要验证服务中的客户端,我查看HTTPContext.Current.User(当从Silverlight调用服务时可以工作)

但是,我一直试图从asp.net回发中调用相同的服务。但是,当我逐步进入服务时,HTTPContext.Current有一个用户名的emplty字符串。

我猜我在web.config文件中没有做的事情导致httpContext没有通过代理发送到我的服务?

任何想法都将不胜感激。我需要能够以某种方式使用asp.net成员资格和角色来验证客户端,并让它在asp.net客户端和Silverlight客户端上运行。

5 个答案:

答案 0 :(得分:2)

我已经解决了!

默认情况下,Silverlight应用程序将所有浏览器cookie发送到服务。其中一个cookie是“.ASPXAUTH”cookie,用于对成员资格和角色进行身份验证。

然而,asp.net应用程序没有将cookie发送到服务。要发送授权cookie,我在调用我的webservice方法之前使用了以下代码。

    using (OperationContextScope scope = new OperationContextScope(ws.InnerChannel))
    {
HttpRequestMessageProperty httpRequest = new HttpRequestMessageProperty();
OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequest);

            HttpCookieCollection cc = Page.Request.Cookies;
            if (Request.Cookies[".ASPXAUTH"] != null)
            {
                HttpCookie aCookie = Request.Cookies[".ASPXAUTH"];
                String authcookieValue = Server.HtmlEncode(aCookie.Value);
                httpRequest.Headers.Add("Cookie: " + ".ASPXAUTH=" + authcookieValue);

            }
// Webservice call goes here
    }

答案 1 :(得分:1)

而不是HTTPContext尝试ServiceSecurityContext.Current.PrimaryIdentity

答案 2 :(得分:0)

不确定它是如何使用Silverlight而不是ASP.Net,但对于初学者来说这是一个很好的blog post on how to setup WCF to work with ASP.Net membership providers。有很多步骤,所以这可能很容易错过设置。

一旦你正确地工作,我想两者都应该正常工作。

答案 3 :(得分:0)

我想这可能是因为我的wcf服务在我的silverlight.web项目中,并且在共享方面它们可能更友好。

我可能需要阅读更多有关wcf的内容,并通过建立单独的Web服务项目来创建更大的关注点?

答案 4 :(得分:0)

更新

好的,我已经看过使用Fiddler的HTTP Post请求

看起来Silverlight应用程序正在发送带有授权cookie的“状态”而我的asp.net应用程序不是。

我打电话给服务时看起来需要发送状态+我的授权cookie。我可能需要尽快提出一个新问题......