WCF-RIA:第二次函数调用后访问被拒绝

时间:2014-08-16 18:45:58

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

我有一个使用Silverlight和WCF RIA的Web应用程序。该应用程序还使用Forms身份验证和HTTP。 Silverlight应用程序调用具有多个Public函数的DomainService。在Domain类的顶部是属性:

  

[RequiresAuthentication]
  [EnableClientAccess()]

这个应用程序和DomainService已经运行了很长时间,但突然(在多台测试机器上)我们开始收到错误:

  

System.ServiceModel.DomainServices.Client.DomainOperationException:   查询' MyFunction'的加载操作失败。进入操作   ' MyFunction的'被拒绝了。

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

  

this.ServiceContext.User.Identity.IsAuthenticated

返回True。但是,如果我然后在服务中调用第二个函数,我会得到错误。如果我在第二个函数中放置断点,它将永远不会被击中。

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

我已经检查了我所知道的每个可能的配置选项,但无法跟踪此问题。事实上它在第一次调用时起作用但随后总是失败并且每次其他调用都出现访问错误这一事实令人费解。

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

  

context.User.Identity.Name

有一个值

  

IsAuthenticated == true。

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

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

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

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

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

我注释掉了这一行,一切都很好,我可以要求我的域名服务验证。