【问题标题】:WCF-RIA: Access Denied after 2nd function callWCF-RIA:第二次函数调用后访问被拒绝
【发布时间】:2014-08-16 18:45:57
【问题描述】:

我有一个使用 Silverlight 和 WCF RIA 的 Web 应用程序。该应用程序还使用表单身份验证和 HTTP。 Silverlight 应用程序调用包含多个公共函数的 DomainService。 Domain 类的顶部是属性:

[需要身份验证]
[启用客户端访问()]

这个应用程序和 DomainService 在很长一段时间内一直运行良好,但突然间(并且在多台测试机器上)我们开始收到错误:

System.ServiceModel.DomainServices.Client.DomainOperationException: 查询“MyFunction”的加载操作失败。访问操作 'MyFunction' 被拒绝。

问题是,这只发生在第 2 次以及对该服务的任何后续调用。例如,如果从我的 Silverlight 应用程序中我首先调用 FunctionA() 它将正常工作并且服务函数中的属性

this.ServiceContext.User.Identity.IsAuthenticated

返回真。但是,如果我随后在服务中调用第二个函数,则会收到错误消息。如果我在第二个函数中设置断点,它将永远不会被命中。

如果我将属性 [RequiresAuthentication] 注释掉,那么一切都会再次起作用。为了安全起见,我需要对用户进行身份验证。当我返回到常规的 aspx 页面并检查身份验证时,用户仍然是经过身份验证的。

我已经检查了我知道的所有可能的配置选项,但无法追踪到这个问题。令人费解的是,它在第​​一次调用时有效,但在所有其他调用中总是失败并出现访问错误,这令人费解。

在服务中,我覆盖了 Initialize 函数,以便我可以检查 Identity 属性并查看用户是否已通过身份验证。第一次通话

context.User.Identity.Name

有一个值并且

IsAuthenticated == 真。

正如我之前提到的,我在服务中调用的第一个函数现在会成功,但是我在服务上下文中调用的第二个函数.User.Identity.Name 将是一个空字符串并且 IsAuthenticated 将为 false。

问题是,我知道用户仍在网站上通过身份验证,因为如果我重新加载 Silverlight 页面并再次调用该服务,第一个函数调用将我视为已通过身份验证,然后第二个函数调用没有 - 再次。此外,如果我返回到常规的非 Silverlight aspx 页面,我仍然是经过身份验证的。

有什么想法吗?

谢谢

【问题讨论】:

    标签: wcf-data-services wcf-ria-services


    【解决方案1】:

    我发现了问题。另一位程序员最近将以下行添加到 app.xaml.cs。

    WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
    

    我注释掉了这条线,一切都很好,我可以要求对我的域服务进行身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多