Wcf 如何从JavaScript访问服务引用?

Wcf 如何从JavaScript访问服务引用?,wcf,wcf-data-services,Wcf,Wcf Data Services,(WCFDS=WCF Data Services 5,由实体框架支持,使用oData v3,格式为JSON,通过IIS7提供服务,并受Windows身份验证保护。) 关键是通过AJAX调用以经过身份验证的方式访问WCFD 为此,我有一个客户端作为ASP.Net Web应用程序,在Web.config中设置了Windows身份验证,还有一个指向WCFDS的服务引用 我想使用客户端JavaScript访问服务引用。我该怎么做 我曾想过创建一个aspx页面,在客户机中托管,并将JavaScript代码

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

关键是通过AJAX调用以经过身份验证的方式访问WCFD

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

我想使用客户端JavaScript访问服务引用。我该怎么做

我曾想过创建一个aspx页面,在客户机中托管,并将JavaScript代码的调用直接发送到此页面,然后通过服务引用检索数据——但我不知道如何以这种方式公开服务引用的全部功能(有几十个实体)


有人可以提供建议吗?

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

有很多关于在WCF数据服务上使用Windows授权的好文章;简而言之,您可以自由选择如何公开授权(从过滤提要中的单个实体到抛出401/403)

有几篇好文章可以通读:

  • (是的,我知道这是forms auth,但其中的auth部分与WCF数据服务中的代码外观完全正交)
您可能编写的最简单代码如下:

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...
    }
}
namespace Scratch.Web
{
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
公共类服务:数据服务
{
[查询接收器(“产品”)]
公共表达产品授权()
{
如果(!HttpContext.Current.Request.IsAuthenticated)
{
返回值(p)=>false;
}
return(p)=>HttpContext.Current.User.IsInRole(“AllowAccessTopProducts”);
}
//…服务代码的其余部分。。。
}
}

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

尝试确保我理解您的问题。如果我错了,请纠正我。您有一个Web应用程序,其中包含使用EF提供程序的WCF数据服务。IIS强制执行Windows身份验证。你想从某个网页的某个地方(可能是加入域的机器)通过JavaScript访问该服务,对吗?嗨,对了。我想我只需要在Web.config中设置适当的Windows授权设置,这两种设置都是正常的,并且让IIS保持匿名(应用程序设置角色等)