2011-03-23 46 views
1

我有一个同时使用RIA身份验证域服务和RIA实体域服务的Silverlight应用程序。该应用程序在标准部署方案中运行时正常运行,在该方案中,RIA服务是从与Sivlerlight应用程序相同的ASP.Net网站下载的。Silverlight RIA应用程序使用来自不同网站的服务

为了让我的部署更加灵活,我想使用单独的Web应用程序来托管RIA服务并承载Silverlight应用程序。我设法让RIA服务在单独的网站上运行,并更新了我的Silverlight应用程序以指向它们。问题是认证似乎中断。我已经看过RIA在fiddler中的请求,并且认证cookie看起来是正确的。

是否有人设法将Silverlight RIA应用程序部署在不同于从Silverlight应用程序下载的网站上托管的RIA服务?

+0

不确定这适用于单独的Web项目。 http://www.blogs.victorero.com/2010/04/20/CreatingASilverlightApplicationWithAWCFRIAServicesClassLibrary.aspx – 2011-03-24 00:57:19

+0

它不适用。我已经在Silverlight客户端中提供了我的RIA服务类。 – sipwiz 2011-03-24 01:04:24

回答

0

最后我用小提琴手来看看这是工作了自我要求的差异,唯一的区别托管RIA服务和外部之一,唯一的区别是HTTP引用头。 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); 
    } 

    .... 
+0

由于跨域发布是您的第一个问题吗?如果您仍希望跨不同域托管的服务可以检查:http://msdn.microsoft.com/en-us/library/cc197955(v=vs.95).aspx – 2012-03-16 18:58:14

0

编辑:这也不会帮助你。

http://msdn.microsoft.com/en-us/library/ee707359%28v=vs.91%29.aspx

域上下文类包含三个构造:

  1. 嵌入所述URI必要与使用WebDomainClient类通过http域服务进行通信的默认构造函数。

  2. 允许客户端指定替代URI的构造函数。

  3. 允许客户端提供自定义DomainClient实现(通常用于单元测试或重定向到自定义传输层)的构造函数。

+0

是的,我使用的构造函数允许我指定一个自定义URI。我相信我的问题实际上是在服务端。出于某种原因,当我将它们移出原始Web应用程序时,实体域服务和身份验证域服务不能一起工作。 – sipwiz 2011-03-24 02:15:46

+0

在新的Web应用程序中,您将它们移到了System.ServiceModel.DomainServices.Hosting,System.ServiceModel.DomainServices.Server和System.ServiceModel.DomainServices.EntityFramework设置为Copy Local True? – 2011-03-24 02:23:46

+0

不,但也不是原来的网络应用程序。我以前在这两个Web应用程序中检查了这些程序集的bin目录,并且都没有。他们不应该需要它们,因为这两个应用程序都位于同一台机器上,并且组件位于GAC中。 RIA服务在新的Web应用程序上工作,因为Siverlight客户端可以与他们交谈,这与身份验证有些不相干,我想知道是否有人设法做同样的事情。 – sipwiz 2011-03-24 03:17:53

相关问题