2012-07-16 47 views
1

我使用MVC4在.NET中创建业务应用程序。该应用程序将被多个公司客户使用,每个客户都拥有自己的品牌元素(包括样式表和徽标图像)。 UI为后端平台调用Web服务以填充应用程序的各个区域;调用这些Web服务时必须提供客户特定的参数。NET - 动态加载基于URL的应用程序配置

我的目标是部署应用程序的单个实例,同时使应用程序根据URL本身的一部分动态加载适当的品牌方案和Web服务参数。该应用程序将是一个面向公众的消费者应用程序(由我的组织代表公司客户托管),因此该URL必须易于记忆(因此不会依赖查询字符串参数进行访问),例如https://mysite.com/companyname

意图是提供具有单一代码库和功能集的产品(使产品更容易支持,而不是为每个公司客户提供多种不同的部署),同时支持有限度的品牌。我可以使用一小部分手动操作设置(例如为每个客户创建一个新的app.config,web.config或虚拟目录)。

任何人都可以推荐一种建议的方法或最佳实践来实现这种类型的应用程序?请注意,如果必须解析URL结构,则需要确保在开发环境,QA环境和登台环境中可以正确复制结构。

我目前的方法需要将应用程序分别部署到不同的客户特定环境,并且web.config文件中引用了自定义品牌和Web服务参数作为“appsettings”键,这对每个客户都是不同的。对于少量部署来说这是可以的,但是会因为功能升级/错误修复推动成千上万个客户站点的需要而变得难以实施。谢谢!

+0

想知道您是否考虑过数十家(或数百家)公司访问单个网站的缩放选项? – oleksii 2012-07-16 13:34:59

+0

您好Oleksii - 是的,该网站托管在一个负载平衡的平台上,每天处理大约120万个基于Web服务的请求,每个季度处理大约20亿次批量事务(在数据库上)。使用此应用程序的单个公司客户在繁忙的一天可能会看到1000到5000个请求,而下降的天数大概是10个请求。如果我可以在单个负载平衡的Web /应用服务器平台上部署25,50或100个部署之前,需要进行第二次部署代码,我会非常高兴(我主要试图解决操作部署/版本开销)。谢谢! – 2012-07-16 13:43:38

回答

1

最简单的解决方案是在大多数情况下使用动态样式表。这里有一个好例子Dynamic CSS for ASP.NET MVC?和一个完整的源示例http://www.codeproject.com/Articles/171695/Dynamic-CSS-using-Razor-Engine

其余的细节。你需要从url(或者cookie - 用于在dev/qa中测试它)中解析公司标识符。您需要从存储,数据库或配置文件中提取特定于客户的值,无论哪种方式适合您。一个不相关的事情要考虑。 https://mysite.com/companyname。如果公司更改他们的名字怎么办?您可能需要一个用户友好的外观,但秘密的技术网址,如https://mysite.com/companyname/590。您可以显示用户友好的名称,但在代码中忽略它,并使用公司标识。那么如果公司更改名称,没有biggie - https://mysite.com/somethingElse/590

+0

这非常有帮助!我会试试看,并跟进它的结果。你会建议改变MVC路线结构本身以容纳公司名称/公司ID吗?谢谢! – 2012-07-16 14:36:27

+0

看看如何stackoverflow它:) http://stackoverflow.com/questions/11505451/net-dynamically-loading-app-configurations-based-on-url。 11505451看起来像问题区域的ID,它拉起了客户友好的网络动态加载应用程序配置基于URL。这取决于你首先放置哪一个,ID首先可能更容易。它可能更加用户友好,但小企业可能不会得到它,并希望他们的名字第一 – 2012-07-16 17:13:54

+0

完美!我最终为我的MVC路由添加了“companyid”和“companyname”参数,所以现在我有https://mysite.com/companyname/companyid。如果公司ID没有提供,我根据名称查找它,然后所有其他操作使用该ID。我最终为每个客户端创建了一个文件夹结构,因此该站点有一个客户端/公司ID /文件夹。该文件夹包含特定于客户端的样式信息和图像资源,以及特定于客户端的Web服务参数的配置文件。像魅力一样工作,感谢您的帮助! – 2012-07-17 12:59:52

0

实现此目的的一种方法是为每个客户创建一个文件夹的目录结构。然后在每个文件夹中都有自己的客户特定文件,例如css,模板,品牌等。 您也可以在应用程序启动时应用共享/公用文件夹,并在所有客户之间共享。

然后你需要从你的URL中提取的唯一东西是客户端的名字(如果可能的话)。这将决定加载和应用哪个文件夹及其内容。