显示带有标签的帖子 SharePoint应用. 显示所有帖子
显示带有标签的帖子 SharePoint应用. 显示所有帖子

2013年7月12日,星期五

Deploying SP2013 provider-hosted apps/Remote Event Receivers to Azure网站 (for Office 365 apps)

在SharePoint 2013之前,我们都习惯了在SharePoint服务器上运行自定义代码的想法。但是,这随SP2013改变–Microsoft强迫我们(Office 365)或指导我们(本地)运行此类代码 SharePoint框。你会明白为什么–坦率地说,如果每个人都有,Microsoft将无法提供稳定的Office 365 / SharePoint Online平台’在其上运行的自定义代码。因此,SharePoint 2013允许事件接收器代码在 远程 服务器。这篇文章着眼于将远程事件接收器组件部署到Office 365中运行的SharePoint网站的Azure网站。 由于RER在SharePoint 2013中采用提供商提供的应用程序的形式,因此我在此处编写的所有内容也适用于提供商提供的应用程序。 要对本地场实现相同的操作(对代码和配置步骤进行更改), 除非您已将该环境配置为信任ACS。在我们潜水之前,这里’s在我们整个应用程序系列中的位置:

  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. Deploying SP2013 provider-hosted apps/Remote Event Receivers to Azure网站 (for Office 365 apps) [本文]
  10. 在SharePoint应用程序中使用Web部件

为什么将这些内容部署到Azure?

我认为,SharePoint远程代码(例如某些提供商托管的应用,远程事件接收器等)的一个不错的选择是将该代码托管在“Azure Websites” 关ering (*update 可能 2015 - Azure网站 are now 已知的 as "Azure Web Apps"*)。这很引人注目,因为它’免费,快速且易于旋转,而您却没有’无需提供任何内部服务器(所需的高可用性,可伸缩性,备份/还原和性能工作)。另一个重要因素是你不’不需要让您的网关/网络团队参与网站的建设(该网站托管着您的提供商托管的应用程序页面和/或用于远程事件接收器的WCF服务) 发布(当然在SSL上)并且可以从外部访问 -例如通过UAG或任何外围设备。 Azure已经在您的防火墙之外,并且当然可以通过Internet和Azure网站访问/寻址 在默认域(* .azurewebsites.net)上具有自动SSL支持。如果您想改用自定义DNS主机名(例如code.MyCompany.com),则也可以执行此操作,但需要执行一些额外的步骤。  In general, using Azure网站 is a great way to sidestep many of the infrastructure roadblocks which can derail you.

如何将我的应用程序/ RER构建为自动托管的应用程序?

* 2015年初更新-Office 365中不再提供自动托管的应用程序!*

It’这是一个公平的问题,因为Office 365不仅会自动托管应用程序“just work”, but in fact they actually run on Azure网站 underneath. 那么,为什么不这样做呢?好吧,这非常适合演示和概念验证代码。但是我个人不会’向客户推荐此架构以进行生产时感到不自在,并且 我注意到其他人也有同样的感觉。坦白说太多了“black box”继续使用自动托管的应用– there aren’目前几乎没有任何旋钮和转盘,而且技术细节很少(例如,比例尺限制,放大的可能性)。此外,任何为商店构建应用程序的人都会注意到,自动托管的应用程序无法在该处出售,因此’目前尚不清楚它们是否会在将来出现。
So, I prefer the more manual approach of deploying to Azure网站 myself. The benefits I get are:
  • I can scale up from Azure网站 (shared) to reserved hardware (e.g. if my app is more heavily used, or uses more processor/memory than anticipated)
  • 我可以使用Azure’s AutoScale功能(当前处于预览状态)可根据我设置的规则(例如处理器阈值)自动执行此操作
  • 我对我的应用程序有更好的监控
  • 我可以对应用程序的Azure片段进行更改,而无需重新部署SharePoint片段
  • 我可以通过许多不同的方式发布(例如,FTP,WebDeploy,从TFS进行连续部署,git等)
  • 我可以通过打开FTP客户端来检查Azure中的文件以进行故障排除

我的O365 / SP2013排列如何适合本文?我还应该考虑什么?

排列 考虑
Office 365 + app in Azure网站 本文重点。 如上所述,它与自动托管的应用程序非常相似,但具有更多的控制权。
On-premises + app in Azure网站 您’d需要对此处讨论的代码/过程进行一些更改。实际上,您需要配置高信任度/ S2S身份验证(而不是ACS的OAuth),并确保您’重新使用正确的TokenHelper方法或等效的自定义代码。 S2S的替代品可能是 即时认证.
本地服务器中的Office 365 +应用 之所以具有吸引力,是因为它可以轻松地与其他本地应用程序/数据集成。但是,由于操作IT,通常会更加复杂上面列出的挑战。可使用Azure 服务巴士,BCS之类的技术解决,或者通过从本地到Internet / DMZ的自定义服务(例如WCF)公开数据。
本地服务器中的本地+应用 非常简单,因为一切都在防火墙后面。需要S2S身份验证配置或 即时认证.


这可能是什么样的代码?

SharePoint 2013 / Office 365中的此类远程代码示例如下:
  • 远程事件接收器
    • 列出事件(例如ListAdding)
    • ListItem事件
    • 网络活动
  • 应用事件
    • AppInstalling / AppInstalled
    • AppUpgrading / AppUpgradeed
    • AppUninstalling / AppUninstalled
  • 其他应用程式码–即由提供商托管的应用中的全部功能

你需要什么– a summary

尽管简单的F5部署将在开发过程中照顾很多方面,但为了正确打包/部署应用程序以使其“实际使用”,以下是您需要的一些关键事项:
  • A website to be created on Azure网站
  • 使用远程事件接收器的解决方案– 首次执行此操作时,建议您使用保证工作正常的代码,而不要使用您自己的代码(以免弄错代码和/或RER声明)。我用了 MSDN上的BasicDataOperations SP2013提供程序托管的应用程序
  • 在您的SP2013环境或Office租约上向AppRegNew.aspx注册该应用程序–这将创建一个新的应用程序主体“known” to the environment.
  • 在应用内:
    • 应用中的所有URL引用都将更新为指向您Azure网站的绝对URL,例如:
      • 远程事件接收器的声明
      • AppManifest.xml等中列出的应用程序起始页。
    • AppManifest.xml的AppPrincipal部分中列出的远程Web应用程序的ID(即App ID)
  • 对于代表远程网站(而不是应用程序本身)的Visual Studio项目:
    • 使用ClientId和ClientSecret更新的web.config (请注意,在Azure中,还可以在Web应用程序配置中指定AppSettings值,作为web.config的替代方法。下面的步骤使用此方法)
    • 它将发布到您的Azure网站–有很多选项,但是我喜欢WebDeploy(如下所示)

详细过程

这里’是整个过程的详细说明-我’尽管我确实指出了一些事情,但我非常关注这里的基础结构/配置而不是代码。
  1. 创建或获取您的解决方案。与任何带有远程组件的SharePoint应用程序一样, 基本数据操作 应用程式I’在使用中,有两个Visual Studio项目:
    1. 一个用于SharePoint应用程序
    2. 一个用于远程组件(即,这是ASP.NET网站,托管用于Remote Event Receiver的Web服务)
  2. 使用AppRegNew.aspx(即可以在/_layouts/15/appregnew.aspx上找到的页面)注册您的应用,并记下应用ID和应用秘诀:

    AppRegNew
    AppRegNew确认
  3. 在以下位置创建您的Azure网站 Azure管理门户 –记下URL。就我而言,这是 //cobspdev.azurewebsites.net
  4. 更新SharePoint应用程序项目,以便URL引用指向此Azure网站:
    1. RER声明应如下所示:
      ** N.B.我较新的代码示例未在RSS阅读器中显示- 点击这里查看全文 **
    2. AppManifest.xml应该看起来像这样:
      ** N.B.我较新的代码示例未在RSS阅读器中显示- 点击这里查看全文 **


      请注意,打包应用程序时,Visual Studio将替换“〜remoteAppUrl”令牌-出现一个对话框,询问您将在何处托管远程Web应用程序,并且您在文本框中输入的值(例如,Azure中的URL)使用。

  5. 还要确保AppManifest.xml的SharePoint AppPrincipal部分列出了RemoteWebApplication,其中ClientId属性设置为App ID(来自应用程序注册):
    ** N.B.我较新的代码示例未在RSS阅读器中显示- 点击这里查看全文 **
  6. [可选]如果要调试远程代码,则应在Azure上设置Service Bus实例,并使用它配置SharePoint应用程序项目(* 2015年更新-不再需要此步骤-Azure Web Apps中的远程调试现在无需服务总线配置即可进行*):
    1. 转到“Service Bus”Azure管理门户中的“区域”,并为此应用程序创建一个新的命名空间:
      应用程序调试-Azure中的服务总线 
    2. 然后点击“连接信息”此名称空间并查看详细信息–复制连接字符串:
      应用程序调试-服务总线连接字符串
    3. 最后,在Visual Studio中,转到应用程序项目(而不是Web项目)的项目属性。转到“ SharePoint”选项卡,然后滚动到底部– ensure “启用远程事件调试”选中,然后将服务总线连接字符串粘贴到文本框中:
      应用程序调试-配置VS项目
      如果您需要更多相关信息,请参阅 更新以使用Visual Studio 2012调试SharePoint 2013远程事件.

  7. 发布 the ASP.NET website to Azure – I’m在此处使用WebDeploy(* 2015年更新-注意,如果您安装了Azure SDK,则要比这简单得多-单击VS中的“发布...”按钮后,用于Azure订阅的Web应用程序将被列为目标。请注意,如果尚未登录,则需要从VS登录到Azure *):
    1. Download the 发布 Profile for your Azure Website:

      下载发布个人资料
      下载发布个人资料-保存 
    2. 发布 the app – importing the 发布 Profile since this is the first time:
      发布 web app
      发布 web app - import   
      发布 web app - import - select file

      发布 web app - validate settings 
    3. 一旦验证了“发布配置文件”中的设置(如上图所示),请单击“Publish” to deploy to your Azure site. 您 should then see a success message:

      发布 web app - publish success
      现在,远程组件已部署到Azure。

  8. 如前所述,可以像往常一样在web.config文件中或在Azure中的Web应用程序属性中指定Azure Web Apps AppSettings。通常,您会使用前者,但是为了说明Azure中的机制,该选项如下所示-您将转到Azure门户 并选择您的网站。请点击 配置,然后向下滚动到AppSettings部分–在此处输入ClientId和ClientSecret:

    Azure-应用程序设置  
  9. 发布 the SharePoint app to Office 365 (by first publishing to the filesystem):

    发布 app 
    您’将显示一个类似于以下内容的对话框(* 2015年更新-在更高版本的Visual Studio工具中不再在此处指定“客户端机密”。只需确保该应用在AppSettings中是正确的*)–确保网址和客户ID为 正确指定,这些值将正确打包到应用清单中

    发布 app - enter settings

    发布 app - files generated 

  10. 此时,该应用程序已准备就绪,可以添加到Office 365租约中的“应用程序目录”中。转到  “Apps for SharePoint”关联的App Catalog网站中的库,然后按常规上传.app文件,或将其拖入:

    发布 app - upload to app catalog
  11. 现在可以将应用程序添加到网站:

    应用安装-现场
  12. 一旦许可请求被接受,就可以安装该应用并运行它。通过在“网站内容”页面中单击来输入应用程序:

    应用程式-网站内
..并且在您的Azure站点中运行BasicDataOperations MSDN示例应用程序’忍者CSS和响应式设计的荣耀:

基本数据操作
当然,要点是您现在正在运行远程代码,并具有托管它的位置。

概要

在必须运行代码的情况下“off-box”对于SharePoint(例如Office 365),Azure Web Apps可以提供比本地IIS服务器更轻松的方法。您可以使用Azure’可以灵活地从免费选项(非弹性)扩展到可提供生产级运营水平的付费选项之一。

您 have to consider if you are happy for your code to run there and who might "own" the use of Azure within your organization, and 也许 诸如身份验证/与本地系统集成之类的一些考虑因素可能会为您排除这种情况。否则,它可以使您免于处理许多基础结构方面的问题(尤其是使网站在外部发布),因此该工具箱中的工具非常有用。

2013年6月24日,星期一

SP2013 托管网络应用:设置字段和内容类型

继续转移到SharePoint“host web apps” or “Full Control apps”(例如,提供给主机网络的应用)是我关于应用的较大系列文章中的内容,今天,我想看看供应字段(网站列)和内容类型–而是将其设置到宿主网站而不是应用网站中。只是为了解释我们在整个系列中的位置,在这里’不断变化的目录:

  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. Deploying SP2013 provider-hosted apps/Remote Event Receivers to Azure网站 (for Office 365 apps)
  10. 在SharePoint应用程序中使用Web部件

The idea of设置字段和内容类型 to the host web are important techniques for 托管网络应用 - since if we can have an app which creates fields/content types AND can provision files to the host web (using the techniques in 我以前的文章),那么我们可以使用一个应用来交付典型SharePoint协作解决方案的构建基块。

与以往一样,只有在以下情况下才有可能:

  • 应用程序请求(并被授予)“Full Control”主机网站的许可
  • CSOM代码用于配置,而不是标准功能XML

N.B.在这一点上,您可能对“Should you do this? Deciding between 托管网络应用/sandbox/farm..”上一篇文章的第二部分。

向主机网站配置字段和内容类型时面临的挑战

我想如果我们’重新构建这样的应用程序,那么我们’d可能需要一些辅助方法,这些方法可以:

  • 设置字段(作为网站栏)
  • 供应内容类型
  • 将字段添加到内容类型

和以前一样’m在我的SharePoint托管应用程序的默认页面中使用JSOM代码–如果需要,可以将其调整为其他内容。我注意到的一些挑战是:

  • 它没有’似乎可以使用CSOM创建具有特定内容类型ID的内容类型–也许我忽略了一些东西,但是无论如何似乎确实有可能 获得 再打个电话
  • 似乎您必须在初始配置后重新获取任何字段和内容类型才能使用它们–您不能使用从CSOM / JSOM方法返回的对象。如果您尝试这样做,CSOM似乎会为您提供切勿’没有一些成员,这会导致如下错误:

    必须重新获取ctype

如何:向主机网站配置字段和内容类型

下面的代码有些杂乱无章,因为它需要一连串CSOM命令–一种改进是将代码移至使用 诺言 和jQuery’s 推迟 目的。实际上,某些方法需要在成功回调中调用,因为例如在将字段添加到内容类型之前,我们需要两者都存在。

我还花了一段时间才意识到,我需要引用实际的SP.Field才能使用SP.FieldLinkCreationInformation,而在我 可以 可能获得我的内容类型’创建后的ID,然后使用该ID进行获取,只需迭代所有内容类型并查找我的ID,即可获得相同数量的CSOM调用。反正这里’s the code I used:

** N.B.我较新的代码示例未在RSS阅读器中显示- 点击这里查看全文 **

运行应用

构建我们的应用并将其添加到网站后,添加人员必须接受“完全控制”权限请求:

完全控制应用程序权限要求

..就像上次一样,我的应用程序具有一些示例UI,用于确认已采取的步骤:

 结果

结果

现在,当我们返回到宿主网站时,我们看到我们的字段和内容类型确实已配置:

预设栏位 预配内容类型

..,并且该字段已添加到内容类型中,因此可以使用:

字段已添加到内容类型

下载代码

您 can download the full Visual Studio project with the code I used for these two articles from here – 下载代码.