打开 Windows 身份验证时使用 ajax 调用 Web 服务?

Posted

技术标签:

【中文标题】打开 Windows 身份验证时使用 ajax 调用 Web 服务?【英文标题】:Using ajax to call a web service when Windows Authentication turned on? 【发布时间】:2010-10-09 21:28:04 【问题描述】:

我正在尝试从 javascript 调用 Web 服务方法:

function Search() 

        var context = new Object;
        context.Filter = "Test";

        SearchService.GetSearch(context, onSuccess, onFailed);
    

    function onSuccess(result) 
        // userContext contains symbol passed into method
        var res = document.getElementById("resultsDiv");
        res.innerhtml = result;
    

    function onFailed(result) 
        var res = document.getElementById("resultsDiv");
        res.innerHTML = result.get_message();
    

这是网络服务签名:

[WebMethod]
    public SearchComboBoxItemData[] GetSearch(object context)
    

当我使用表单身份验证并允许匿名访问网络服务时,一切正常。

但是,当我对应用程序使用 windows 身份验证,但只允许匿名访问 web 服务时,从 javascript 调用 web 服务会引发以下错误:

Web 服务调用无效,参数缺失值:'context'。

我注意到的另一件事是它在 Firefox 中都可以正常工作。我在 IE7 上看到了错误。

对可能的解决方案有什么想法吗?

【问题讨论】:

当您启用对服务的匿名和身份验证访问时,它是否可以在 IE 中工作? 你找到解决这个问题的方法了吗,我也遇到了同样的问题。谢谢。 【参考方案1】:

听起来您正在使用集成身份验证,并且 IE 已登录,但 Firefox 尚未登录。您可能需要检查登录 IE 的用户名。

还有一些类似的东西:

var temp = "";
for(prop in context)
    temp +=prop+"= "+context[prop]+"\n";

alert(temp);

查看上下文包含的内容。

【讨论】:

【参考方案2】:

我假设您使用的是 ASP.NET Ajax。

您可以尝试添加:

preCondition="integratedMode"

归属于您的 web.config 文件的模块部分。

希望对你有帮助

【讨论】:

以上是关于打开 Windows 身份验证时使用 ajax 调用 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

在 Internet Explorer 上使用 Windows 身份验证通过 SSL 进行跨域 ajax 调用失败

通过 Angular 调用时,Windows 身份验证不适用于 WebAPI

AD FS 2.0 身份验证和 AJAX

使用 windows api 解释 RPC 身份验证

使用 jQuery/ajax 的基本身份验证

每次Access连接到SQL Server而不使用Windows身份验证时,如何避免手动输入登录名和密码