自定义域服务失败但身份验证工作(Silverlight Biz应用程序模板)

时间:2010-09-29 21:31:24

标签: silverlight wcf web-services cross-domain wcf-ria-services

我正在IIS服务器上托管Silverlight业务应用程序模板派生的应用程序。我正在使用内置的表单身份验证,它运行良好。

不幸的是,我添加了一项具有特殊行为的附加服务。如果我远程进入服务器并使用该站点,一切都按预期工作。如果我从另一台PC连接到该站点,身份验证仍然有效,但我的自定义域服务失败,并出现以下错误:

IE抛出此错误消息:

  

System.ServiceModel.DomainServices.Client.DomainOperationException:   查询加载操作失败   '得到___'。类型异常   'System.ServiceModel.DomainServices.Client.DomainOperationException'   被扔了。

我尝试调试过程并获得更多信息:

  

System.ServiceModel.DomainServices.Client.DomainOperationException:   查询加载操作失败   '得到___'。远程服务器返回   错误:NotFound。 --->   System.ServiceModel.CommunicationException:   ...

我的clientaccess策略和跨域策略都在wwwroot和网站的根目录中,如下所示:

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*" /> 
        <domain uri="http://*" /> 
        <domain uri="https://*" />
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true" /> 
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

失败的域服务是使用ADO.NET实体模型。其实体与用于身份验证的aspnetdb数据库相同,并且我已为包含db的App_Data文件夹授予IIS用户(和管理员,我绝望)的文件权限。

同样,如果在服务器上本地连接,则所有服务都有效。远程连接时只能使用身份验证/注册服务。

我已经搜索了两天,并尝试了我能找到的所有解决方案,但似乎无法使其正常工作。任何建议或指示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

虽然这对你的项目来说已经很晚了,但它可能对其他人有所帮助。听起来您在对底层数据库进行身份验证时遇到问题。您可能希望了解在数据库级别发生的模拟行为。

我遇到了类似的问题,结果发现我试图将数据库作为Sliverlight客户端PC帐户访问,该帐户从未在授权帐户中存在(尽管我的身份验证工作完全像您的情况一样)。更改应用程序池标识为我修复了它(我在加入使用Computer $帐户代表您的域的PC上使用网络服务帐户)

当你遇到CommunicationException时,你真的想看一下InnerException,它会告诉我们什么是真正的问题。

如果什么也没有,那么你需要在服务器端调试(逐步服务)以查看抛出异常的内容。

如果在WCF服务器端抛出异常并且没有包含在导致通道出现故障的故障中(至少在我的有限经验中),则会发生CommunicationException。

希望这有助于某人。

答案 1 :(得分:0)

WCF追踪对我没有帮助!它给出了一条空信息。

最后, 我的情况,

  • 我从方法

  • 中删除了[RequiresAuthentication]属性
  • 我从域服务类中删除了[RequiresAuthentication](检查所有部分)

  • 如果它在本地但不在服务器上工作,则必须是配置问题。就我而言,我使用membership.ResetPassword()函数,该函数在web.config中被禁用为enablePasswordReset = false。

除此之外,有些人说某些方法只能在asp.net.compatibility模式下调用。

希望帮助别人。