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

自定义域服务失败,但身份验证有效(Silverlight Biz应用程序模板),silverlight,wcf,web-services,cross-domain,wcf-ria-services,Silverlight,Wcf,Web Services,Cross Domain,Wcf Ria Services,我正在IIS服务器上托管Silverlight业务应用程序模板派生的应用程序。我正在使用内置的表单身份验证,它工作得非常好 不幸的是,我添加了一个具有特殊行为的附加服务。如果我远程访问服务器并使用该站点,一切都会正常工作。如果我从另一台电脑连接到站点,身份验证仍然有效,但我的自定义域服务失败,出现以下错误: IE抛出此错误消息: System.ServiceModel.DomainServices.Client.DomainOperationException: 查询的加载操作失败 “获取”。类

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

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

IE抛出此错误消息:

System.ServiceModel.DomainServices.Client.DomainOperationException: 查询的加载操作失败 “获取”。类型异常 'System.ServiceModel.DomainServices.Client.DomainOperationException' 被扔了

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

System.ServiceModel.DomainServices.Client.DomainOperationException: 查询的加载操作失败 “获取”。远程服务器返回 错误:未找到。--> System.ServiceModel.CommunicationException:

My clientaccesspolicy和crossdomain策略位于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数据库中的实体相同,并且我已为IIS用户(和管理员,我非常渴望)授予包含该数据库的App_数据文件夹的文件权限

同样,如果在服务器上本地连接,所有服务都可以工作。远程连接时,只有身份验证/注册服务起作用


我已经搜索了两天,尝试了我能找到的每一个解决方案,但似乎都没有成功。任何建议或指导都将不胜感激。

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

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

当您遇到CommunicationException时,您真的想看看InnerException,它会告诉您真正的问题是什么

如果没有异常,则需要在服务器端进行调试(单步服务),以查看引发异常的原因

如果在WCF服务器端引发异常,而未将异常包装到导致通道出现故障的故障中(至少在我有限的经验中),则会发生CommunicationException


希望这对某人有所帮助。

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

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

当您遇到CommunicationException时,您真的想看看InnerException,它会告诉您真正的问题是什么

如果没有异常,则需要在服务器端进行调试(单步服务),以查看引发异常的原因

如果在WCF服务器端引发异常,而未将异常包装到导致通道出现故障的故障中(至少在我有限的经验中),则会发生CommunicationException


希望这对某人有所帮助。

WCF跟踪对我没有帮助!它给出了一个空洞的信息

最后,, 就我而言

  • 我从方法中删除了类似[RequireAuthentication]的属性

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

  • 如果它在本地工作,但在服务器上不工作,则一定是配置问题。在我的例子中,我使用了
    membership.ResetPassword()
    函数,该函数在
    web.config
    中被禁用为enablePasswordReset=false

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


希望帮助别人

WCF跟踪对我没有帮助!它给出了一个空洞的信息

最后,, 就我而言

  • 我从方法中删除了类似[RequireAuthentication]的属性

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

  • 如果它在本地工作,但在服务器上不工作,则一定是配置问题。在我的例子中,我使用了
    membership.ResetPassword()
    函数,该函数在
    web.config
    中被禁用为enablePasswordReset=false

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


希望帮助别人

这是迄今为止我发现的最好的东西。我也在找。这是迄今为止我发现的最好的东西。我也在找。