2013年5月8日,星期三

Azure是新的SharePoint‘layouts’ directory

SharePoint开发人员一直需要将文件存储在可以从所有SharePoint网站访问/共享的中央位置。支持图像,CSS和JavaScript等文件通常需要这样做-通常我们不会’我们不希望这些文件存在于每个站点中,因为当需要更新时,我们可能会有10,000个不同的位置来更新文件。您可以想象,还有其他避免该重复的原因。

解决此问题的一种长久的方法是将此类文件部署到服务器文件系统,而不是部署到特定的SharePoint网站。通常,‘_layouts’SharePoint根目录下的文件夹(即‘14’对于SharePoint 2010或‘15’用于SharePoint 2013)用于此类共享文件。第二种方法涉及将文件部署为‘uncustomized’, or ‘GhostableInLibrary’。这通过添加列表项来工作‘stub’将该文件存储到每个站点或库中,但是由于该文件也已部署到SharePoint服务器’的文件系统,文件 内容 从那里被拉。在内容数据库中,SQL记录从字面上有一个指向SharePoint服务器上物理文件位置的指针(同样,该位置位于SharePoint根目录下的某个位置)。

尽管不仅与应用程序开发有关,我将这篇文章纳入了有关应用的10个系列文章中:

  1. SharePoint 2013应用–架构,功能和UX注意事项
  2. 入门–在SharePoint应用程序中创建列表,内容类型,字段等(配置)
  3. 在应用程序网络中使用数据以及为什么要这样做
  4. 从SharePoint 2013应用访问最终用户数据(在宿主网站中)
  5. 将SharePoint 2013应用推广到企业-租户范围和PowerShell安装
  6. Azure是新的SharePoint‘_layouts’ directory [本文]
  7. “Host web apps” –将文件(例如母版页)设置到主机网站
  8. “Host web apps” –设置字段和内容类型
  9. 将SP2013提供程序托管的应用程序/远程事件接收器部署到Azure网站(用于Office 365应用程序)
  10. 在SharePoint应用程序中使用Web部件

云说不

一旦开始开发沙盒解决方案或SharePoint 2013应用程序,当然就不能使用上述技术。无法将文件设置到服务器文件系统,因为服务器可能不属于您–对于Office 365,服务器由Microsoft运行。所以,我们能做些什么?

好吧,我的东西’m sure I’并非首先想到的是,如果生产服务器已连接到Internet(并且始终像Office 365这样的云服务),那么您可以将图像,CSS和JavaScript文件存储在其他服务器(或服务)上,您的页面将正常运行。为了什么’s worth, I’在我的博客网站上已经做了很长时间了– 如果你去寻找,你’会看到我正在加载一些CSS和JavaScript‘across the internet’ from http://sharepointnutsandbolts.azurewebsites.net 而不是 http://www.sharepointnutsandbolts.com. 像我一样,您可能会发现Azure是一个不错的选择– it’s提供多种口味的可靠产品(我使用免费版本),并且存在许多用于将文件保存到其中的选项(FTP,WebDeploy,从TFS / Git进行连续部署等)。当然,任何类似的云服务也可以正常工作–确实可能是某些本地非SharePoint 伺服器 (而不是服务)您提供的。只要记住,使用后一种选择,您 ’d需要照顾高可用性,备份/还原,也许是负载平衡等。感谢Azure,我可以让Microsoft处理这一问题:)

可以想象,我们现在恢复了存储单个文件实例的功能,即使不在SharePoint服务器本身上也是如此。为了说明,在这里’s what the ‘default’ and ‘centralized’方法如下图所示:

默认的应用程序/沙盒开发模型:

Azure用于存储应用程序文件2

集中开发模型:

Azure用于存储应用程序文件

我什么时候应该考虑这个?

我认为这种广泛的方法与以下情况有关:

  • 开发沙盒解决方案
  • 开发SharePoint托管的应用
  • 开发自动托管的应用

我的情况’ve left out is 提供者托管的应用。这是因为无论如何您的支持图像,CSS和JavaScript文件都存储在SharePoint外部– and by 默认 are stored as a single instance. After all, a 提供者-hosted app is just a 非SharePoint网站 在一天结束时。自动托管的应用可能是一个有趣的案例,因为该应用’的支持文件已部署到Azure,但适用相同的协议–它们不会在应用实例之间共享。

如果您使用的是这些模型,并且当前不考虑使用此方法,则可能应该这样做。是的,它可以使初始开发过程更加复杂(因为您的应用程序有效地存储在多个位置),但是在生产环境中一次发布更新将很容易。即使你不’不喜欢这个想法,那么至少可以确保您’我已经考虑了您对这些文件的更新机制。

一个有趣的观察(如果没有)’已经发生过),是提供商托管的应用 主要是 存储在SharePoint外部–包括他们的业务逻辑。这意味着,除其他外,创建者可以选择对应用程序进行相当大的更改 无需将应用程序升级或重新提交给商店。 当然值得牢记。

进一步的考虑

我认为还需要考虑以下几点:

  • 版本控制
    • 您’您最有可能需要提供某种形式的版本控制“remotely-stored”CSS和JavaScript文件,例如将它们存储在名为的文件夹下“v1”, “v2” or “1.0.0.0”, “2.0.0.0”等等。这将允许您为更高版本的应用程序部署更新,同时为不升级的用户/网站保持原始体验
    • 还请记住,如果您 做了 想要更改现有的CSS / JS文件,这些文件很可能会在浏览器中为现有用户缓存。因此,您可能需要做一些事情来破坏缓存(如有关非应用场景的讨论 避免SharePoint中缓存的JavaScript和CSS文件中的错误),但请记住,除非页面由提供商托管,否则对使用的URL的更改将需要对应用程序本身进行更改/升级。
  • 替代储藏口味:

6条评论:

朱西·帕洛(Jussi Palo)说过...

可能仅适用于公共场所。通过公司内部网'd不希望没有文件'in the open'。还是可以将ACS与SharePoint Online一起使用?

奈杰尔 said...

嗨,克里斯,如果CSS的参考位于母版页上,您如何使版本控制起作用?我了解不同的文件夹位。这是问题所在母版页上的引用方式。

克里斯·奥'Brien说过...

@Jussi,

是的,如果这些文件中的详细信息无法公开公开,那么我同意'这可能不是一个好主意。但是,坦率地说,对于普通的企业应用程序,我可以't imagine there'在CSS或JavaScript中过多,这会引起关注。也许如果JavaScript公开了一些环境细节(例如绝对URL /服务器名称等),那将是一件坏事,但这听起来像是JavaScript编写不佳。

一种情况我'd表示商店中的应用程序几乎绝对不适合。在这种情况下,供应商通常不希望以这种方式公开其实施和知识产权(尤其是如果该应用程序不是免费的)。

您提出了有关通过ACS保护Azure内容的有趣建议-当前仅适用于SharePoint Online,但这也许是可行的(如果不是现在,那么很快)。

感谢您的评论,

克里斯。

克里斯·奥'Brien说过...

@奈杰尔

只需在链接URL中包含CSS文件的路径即可,例如MyAzureSite / MyApp / v1 / CSS / MyFile.css

HTH,

克里斯。

西休说过...

如果您想考虑,这也很有用"domain sharding"以利用浏览器下载功能。如果明智地进行操作,则引用其他域上的资源可以提高页面性能。

参考: 史蒂夫·索德斯' Blog

克里斯·奥'Brien说过...

@sihugh,

同意(并且'是个好点),但我不得不说我'我稍微失去了多少'active channels'现代浏览器使用Web服务器进行维护。我认为现在不必担心了,因为浏览器不再像过去那样仅限于2个连接了吗?

如果没有,那么我同意:)好点。

谢谢,

克里斯。