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

Posted

技术标签:

【中文标题】自定义域服务失败但身份验证有效(Silverlight Biz 应用程序模板)【英文标题】:Custom Domain Service Fails but Authentication Works (Silverlight Biz App Template) 【发布时间】:2011-04-19 01:39:00 【问题描述】:

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

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

IE 抛出此错误消息:

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

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

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

我的客户端访问策略和跨域策略位于 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 用户(和管理员,我绝望了)授予了文件权限。

同样,如果在服务器上进行本地连接,所有服务都可以正常工作。远程连接时,只有 Auth/Registration 服务起作用。

我已经搜索了两天,尝试了所有我能找到的解决方案,但似乎无法让它发挥作用。任何建议或指导将不胜感激。

【问题讨论】:

这是迄今为止我发现的最好的东西。我也在找。 mark.mymonster.nl/2009/04/09/… 【参考方案1】:

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

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

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

如果什么都没有,那么您需要在服务器端调试(逐步执行服务)以查看引发异常的原因。

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

希望这对某人有所帮助。

【讨论】:

【参考方案2】:

WCF 跟踪对我没有帮助!它给出了一个空消息。

最后, 就我而言,

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

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

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

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

希望能帮助别人。

【讨论】:

以上是关于自定义域服务失败但身份验证有效(Silverlight Biz 应用程序模板)的主要内容,如果未能解决你的问题,请参考以下文章

ADFS 身份验证 - IE8 有效,Chrome 失败

使用 IdentityServer 与创建基于 JWT 的自定义身份验证

Django,自定义身份验证登录。身份验证失败时如何显示错误消息?

ServiceStack 对身份验证失败的自定义响应

在身份验证失败时返回自定义状态码 .Net Core

与 parse-server 和 auth0 的自定义身份验证集成