我有一个Silverlight应用程序,它同时使用RIA身份验证域服务和RIA实体域服务。在标准部署方案中运行时,该应用程序可正常运行,其中RIA服务来自从下载Sivlerlight应用程序的同一ASP.Net网站。
为了使我的部署更加灵活,我想使用单独的Web应用程序来托管RIA服务并托管Silverlight应用程序。我已经设法让RIA服务在一个单独的站点中工作,并更新我的Silverlight应用程序以指向它们。问题是认证似乎打破了。我看过小提琴手中的RIA请求,认证cookie似乎是正确的。
是否有人设法部署Silverlight RIA应用程序,其中RIA服务托管在与从Silverlight应用程序下载的网站不同的网站上?
答案 0 :(得分:0)
编辑:这也无济于事。
http://msdn.microsoft.com/en-us/library/ee707359%28v=vs.91%29.aspx
域上下文类包含三个构造函数:
使用WebDomainClient类嵌入通过http与域服务通信所必需的URI的默认构造函数。
允许客户端指定备用URI的构造函数。
允许客户端提供自定义DomainClient实现的构造函数(通常用于单元测试或重定向到自定义传输层)。
答案 1 :(得分:0)
最后,我使用fiddler查看用于自托管RIA服务和外部服务的请求之间的差异的唯一区别,唯一的区别是HTTP referrer头。 RIA RequiresAuthentication属性考虑引用者标题似乎很奇怪,所以也许它完全不同。
我能够找到一种方法将我的域和身份验证服务整合到一个域中,并允许它托管在一个非常方便的其他Web应用程序上。方法是将AuthenticationDomainService放入主域服务中。它不允许在客户端上使用相同的使用模式,身份验证是一个实体加载操作,但它仍然可以很容易地使用ASP.Net成员资格提供程序进行身份验证。
[EnableClientAccess]
public class MyDomainService : LinqToEntitiesDomainService<MyEntities>, IAuthentication<User>
{
public class AuthenticationDomainService : AuthenticationBase<User>
{ }
private AuthenticationDomainService m_authService = new AuthenticationDomainService();
public User Login(string username, string password, bool isPersistent, string customData)
{
return m_authService.Login(username, password, isPersistent, customData);
}
....