我正在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用户(和管理员,我绝望)的文件权限。
同样,如果在服务器上本地连接,则所有服务都有效。远程连接时只能使用身份验证/注册服务。
我已经搜索了两天,并尝试了我能找到的所有解决方案,但似乎无法使其正常工作。任何建议或指示都将不胜感激。
答案 0 :(得分:1)
虽然这对你的项目来说已经很晚了,但它可能对其他人有所帮助。听起来您在对底层数据库进行身份验证时遇到问题。您可能希望了解在数据库级别发生的模拟行为。
我遇到了类似的问题,结果发现我试图将数据库作为Sliverlight客户端PC帐户访问,该帐户从未在授权帐户中存在(尽管我的身份验证工作完全像您的情况一样)。更改应用程序池标识为我修复了它(我在加入使用Computer $帐户代表您的域的PC上使用网络服务帐户)
当你遇到CommunicationException时,你真的想看一下InnerException,它会告诉我们什么是真正的问题。
如果什么也没有,那么你需要在服务器端调试(逐步服务)以查看抛出异常的内容。
如果在WCF服务器端抛出异常并且没有包含在导致通道出现故障的故障中(至少在我的有限经验中),则会发生CommunicationException。
希望这有助于某人。
答案 1 :(得分:0)
WCF追踪对我没有帮助!它给出了一条空信息。
最后, 我的情况,
我从方法
我从域服务类中删除了[RequiresAuthentication](检查所有部分)
如果它在本地但不在服务器上工作,则必须是配置问题。就我而言,我使用membership.ResetPassword()
函数,该函数在web.config
中被禁用为enablePasswordReset = false。
除此之外,有些人说某些方法只能在asp.net.compatibility模式下调用。
希望帮助别人。