自定义域服务失败但身份验证有效(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 应用程序模板)的主要内容,如果未能解决你的问题,请参考以下文章
使用 IdentityServer 与创建基于 JWT 的自定义身份验证