【发布时间】: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