2011-07-01 38 views
1

我正在研究为主要使用Microsoft技术的商店构建商业SaS站点的技术。推荐(基于Microsoft的)SaS框架?

这个想法是,该网站将有可插拔模块,功能是免费或付费。客户将能够切换&功能之间的变化,&自动调整其账单,因为他们这样做。

如果我滴溜溜这个我自己,我会使用:

...和手工卷基于IOC-插件架构(例如,对ASP.NET MVC的插件herehere一些很好的讨论)。

但是在这一点上我想知道 - 这是否做过?我正在想象一些模糊的类似于CMS的架构,它具有内置插件,商业订阅内容&。所有这些,都卷入了“现货供应”的解决方案,无论是FOSS还是商业。

任何人都可以推荐这样的解决方案,或者它只是一个'滚自己的'工作?我认为DotNetNuke可能值得关注,但是会很感激那些在生产中使用它来完成这类任务的人的反馈。

编辑为: DotNetNuke出现在continuing with WebForms上,这对我来说至少是一个很大的折衷。正如那个帖子的评论者所说,这是一个进化的死胡同。

再次编辑:Silverlight是绝对是这个项目。我们需要支持多种设备,包括非微软移动设备,如Android和iOS平板电脑&。我们确实需要一个相当丰富的用户界面,但我们将在Javascript中这样做。

回答

1

对于需要可插拔模块的项目,我使用MEF(它内置于.net 4.0)。

通过使用this great code for compiling views into a dll可以很容易地使用MEF来加载额外的视图和控制器,从而使扩展性变得容易。

我唯一不同于你的建议的事情是使用Linq到Entite而不是Linq到Sql。最新的代码,第一个版本使得它非常快的得到的东西和运行

马丁

0

为什么会有人在“现成”的解决方案推出这些? 这些架构的部分是相当独立的,你可以替代任何适合你的需求。

1

我已经为VOIP PBX解决方案做了类似的解决方案。我已经使用nhibernate,autofac和一些自己的库自己做了一切。这与做一个正常的应用程序没有什么不同。

您需要了解的最重要的方面是,所有模块都会在任何时候加载。 Theres没有办法解决这个问题,如果你需要一个运行良好的解决方案(你可以为每个客户准备一个应用程序域,但这不是非常低效)。

您应该使用标准.NET CAS(代码访问安全性)解决方案来控制授权。您可以通过创建您自己的IPrincipalIIdentity来完成此操作。校长应该对应租户(组织),而IPrincipal对应于用户。

我在应该属于租户的所有类/实体上使用一个ITenantEntity接口(包含租户db id)。它用于验证当前登录的用户是否确实可以访问所请求的实体。

最难的是如果你的应用程序是多线程的(例如,如果你有一个后台线程或定时器做一些维护)。原因是很容易忘记切换到正确的IPrincipal这使得你所有的CAS检查搞砸了。最简单的方法是创建一个自定义TimerThread类,这会强制您指定一个IPrincipal(或者至少可以轻松切换)。

另一种常见方法是在所有服务/存储库方法上使用tenantId参数。但这不是一个非常强大的解决方案。