如何从JavaScript访问服务参考?

时间:2012-07-17 00:43:11

标签: wcf wcf-data-services

(WCFDS = WCF数据服务5,由实体框架支持,使用oData v3,格式化为JSON,通过IIS7提供并受Windows身份验证保护。)

症结是通过AJAX调用以经过身份验证的方式访问WCFDS。

为此,我有一个客户端作为ASP.Net Web应用程序,在Web.config中设置了Windows身份验证,并指向了WCFDS的服务引用。

我想使用客户端JavaScript访问服务参考。我怎么能这样做?

我考虑过创建一个aspx页面,在客户端托管并从JavaScript代码直接调用到这个页面,然后通过服务参考检索数据 - 但是我对如何公开完整的功能感到茫然这种方式的服务参考(有几十个实体)。

任何人都可以提供建议吗?

1 个答案:

答案 0 :(得分:0)

web.config中的Windows授权设置与WCF数据服务没有直接关系,因此您可能不需要在那里设置任何内容。您需要在IIS中正确设置设置。

有很多关于在WCF数据服务上使用Windows授权的好文章;简而言之,您在如何选择公开授权方面拥有广泛的自由度(从过滤单个实体到投放401 / 403s)。

阅读几篇好文章:

您可能编写的最简单的代码将是:

namespace Scratch.Web
{
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    public class ScratchService : DataService<ScratchContext>
    {
        [QueryInterceptor("Products")]
        public Expression<Func<Product, bool>> ProductsAuthorization()
        {
            if (!HttpContext.Current.Request.IsAuthenticated)
            {
                return (p) => false;
            }
            return (p) => HttpContext.Current.User.IsInRole("AllowAccessToProducts");
        }

        // ...rest of service code...
    }
}

请注意,客户端上的所有内容都由浏览器控制,因此您不需要在那里执行任何操作(最大的一步可能是将站点添加到可信站点,因此它不会提示您输入凭据如果你在一个加入域的机器上。)