代码之家  ›  专栏  ›  技术社区  ›  JSmyth

调用WCF webservice时为空HttpContext

  •  6
  • JSmyth  · 技术社区  · 16 年前

    我最近编写了一个webservice,用于使用ASP.net成员资格和角色的Silverlight。

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

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

    任何想法都会很感激的。我需要能够以某种方式使用asp.net成员身份和角色验证客户机,并让它在asp.net客户机和silverlight客户机上运行。

    5 回复  |  直到 16 年前
        1
  •  2
  •   JSmyth    16 年前

    我已经解决了!

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

    但是,asp.net应用程序没有将cookies发送到服务。为了发送授权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
        }
    
        2
  •  1
  •   Steve Barbour Steve Barbour    16 年前

    尝试ServiceSecurityContext.Current.PrimaryIdentity而不是HTTPContext

        3
  •  0
  •   Bryant    16 年前

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

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

        4
  •  0
  •   JSmyth    16 年前

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

        5
  •  0
  •   JSmyth    16 年前

    更新:

    好的,我用Fiddler查看了HTTP Post请求

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

    看起来我需要在调用服务时发送state+我的授权cookie。我可能需要尽快提出一个新问题。。。