【问题标题】:Adding a Service Reference to Application向应用程序添加服务引用
【发布时间】:2012-04-21 17:22:58
【问题描述】:

尝试向我的 Windows 8 应用程序添加服务引用。但是 asmx 文件位于具有某些角色的登录用户可以查看的文件夹中。就像受保护的文件夹一样,我也在为网站使用 asp.net 会员提供程序。如何添加此引用或对其进行身份验证?

谢谢。

【问题讨论】:

    标签: c# asp.net web-services


    【解决方案1】:

    有一种更简单的方法来授权您的服务用户,这应该可以解决您的一些问题。

    首先,将您的服务放在一个公共文件夹中,根本没有授权。这将允许您毫无问题地添加来自 Windows 8 应用程序的引用。

    然后,在您的服务中,创建一个方法来验证您的用户:

    public bool Login( string UserName, string Pwd )
    {
        // validate the user and create the forms cookie upon succesfull validaition
        if ( IsValid( UserName, Pwd ) ) 
        {
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( ... );
    
            string CookieName = FOrmsAuthentication.FormsCookieName;
            string CookieValue = ticket.Encrypt();
    
            this.Response.Cookies.Add( new HttpCookie( CookieName, CookieValue ) );
        }
    }
    

    此公共方法将是您的 Windows 8 应用应调用的第一个方法。

    然后您使用PrincipalPermission 属性保护所有其他服务方法:

    [PrincipalPermission( Roles="Admin, User" )]
    public TheMethodForAdminOrUser()
    {
        // do whatever you want
    }
    

    属性将保护您的服务方法的调用,以便只有通过有效调用Login 方法进行身份验证的用户才能访问您的服务。

    【讨论】:

    • 这可行,但是如果我在我的一些网络方法中使用 HttpContext,Windows 8 应用程序是否需要在每个请求上发送会话 ID 或其他内容来识别当前用户是从客户端登录的吗?
    • 只要您对所有调用使用相同的代理实例,代理就会保留所有 cookie,包括包含会话 id 的 cookie。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    相关资源
    最近更新 更多