声明、Azure 和 SharePoint 集成工具包(第 4 部分)
声明、Azure 和 SharePoint 集成工具包(第 4 部分)
这是 CASI(声明、Azure 和 SharePoint 集成)工具包系列文章的第 4 部分,本系列共 5 部分。 第 1 部分概括性介绍整个框架和解决方案并说明本系列文章要尝试解决的问题及涵盖的内容。 第 2 部分提供有关创建 WCF 应用程序并使其能够识别声明,然后将其移到 Windows Azure 的指南。 第 3 部分演练将 SharePoint 网站与 Azure 数据挂接(通过向 _layouts 目录中的页面添加一个新的自定义控件)时将会使用的基类。 在本文中,我将介绍作为此框架的一部分提供的 Web 部件。 它专门设计用于您在第 3 部分中创建并添加到布局页中的自定义控件。
使用 Web 部件
在开始使用 Web 部件之前,显然已假定 a) Windows Azure 中承载了正在工作的 WCF 服务并且 b) 您创建了自定义控件并将它添加到布局页中,如此系列的第 3 部分中所述。 我进一步假定您已将 CASI 工具包基类程序集和您的自定义控件程序集都部署到了 SharePoint 场中每台服务器上的 GAC。 我还假定承载您的自定义控件的自定义 aspx 页已部署到服务器场中每台 Web 前端服务器上的布局目录。 为介绍如何使用 Web 部件,我将使用我上载并附加到“第 3 部分”文章的 AzureWcfPage 项目示例。 因此,现在让我们演练如何将这两项内容绑定在一起以在 SharePoint 网站中呈现 Azure 中的数据。
注意: 虽然不要求必须这么做,但如果调用的 WCF 方法返回 HTML,则使用 Web 部件通常会简化操作,以便可以在页面中直接显示 HTML,而无需进一步处理。
第一步是将 AzureRender.wsp 解决方案部署到服务器场中;此 wsp 包括在附加到本文中的 zip 文件中。 它包含将 Azure 数据视图 Web 部件和 jQuery 1.4.2 部署到布局目录中的功能。 在为网站集部署解决方案并激活功能后,可以将 Web 部件添加到页面中。 此时,您几乎可以开始呈现 Azure 中的数据,但至少需要设置一个属性。 因此,接下来让我们演练 Web 部件的该属性及其他属性。
Web 部件属性
所有 Web 部件属性都在“连接属性”部分。 您至少需要将“数据页”属性设置为您创建并部署的布局页。 例如,/_layouts/AzureData.aspx。 如果您的自定义控件的服务器标记至少定义了 WcfUrl 和 MethodName 属性,则这是您需要执行的全部操作。 如果您没有执行其他操作,则 Web 部件将调用页面并使用页面中配置的 WCF 终结点和方法,并且它将获取方法返回的任何数据(显然方法以 HTML 格式返回数据)并在 Web 部件中呈现数据。 但在大多数情况下,您将需要使用一些其他 Web 部件属性以获得最大的灵活性,因此下面介绍了其中每个属性:
· 方法名称* – 应调用的 WCF 应用程序中的方法的名称。 如果您需要使用自己的 javascript 函数来调用布局页,则此属性的查询字符串参数为“methodname”。
· 参数列表* – WCF 方法的参数的分号分隔列表。 如此系列文章的第 2 部分和第 3 部分中所述,仅支持基本数据类型:字符串、整数、布尔值、泛型和日期时间。 如果您需要更复杂的数据类型,则应首先将其反序列化为字符串,然后调用方法,再在 WCF 终结点中将它重新序列化为复杂类型。 如果您需要使用自己的 javascript 函数调用布局页,则此属性的查询字符串参数为“methodparams”。
· 成功回调地址 – 布局页的 jQuery 请求成功完成后回调的 javascript 函数。 默认情况下,此属性使用 Web 部件附带的 javascript 函数。 如果使用自己的函数,则函数签名应类似如下: function yourFunctionName(resultData, resultCode, queryObject)。 有关详细信息,请参阅位于以下位置的 jQuery AJAX 文档: https://api.jquery.com/jQuery.ajax/(该链接可能指向英文页面)。
· 错误回调地址 – 布局页的 jQuery 请求遇到错误时回调的 javascript 函数。 默认情况下,此属性使用 Web 部件附带的 javascript 函数。 如果使用自己的函数,则函数签名应类似如下: function yourFunctionName(XMLHttpRequest, textStatus, errorThrown)。 有关详细信息,请参阅位于以下位置的 jQuery AJAX 文档: https://api.jquery.com/jQuery.ajax/(该链接可能指向英文页面)。
· 标准错误消息 – 在服务器端处理 Web 部件期间遇到错误时将显示在 Web 部件中的消息。 这意味着它不包括实际上从 Azure 提取数据的情况。
· 拒绝访问消息* – 这是拒绝用户访问特定方法时应显示的“拒绝访问”错误消息。 例如,正如此系列文章的第 2 部分中所述,由于我们要随 WCF 调用传递用户令牌,因此我们可以使用 PrincipalPermission 要求修饰任何方法,如“此用户必须属于‘销售经理’组”。 如果用户不满足 PrincipalPermission 要求,则 WCF 调用将失败并出现拒绝访问错误。 在该情况下,Web 部件将显示“拒绝访问”消息的内容。 请注意,您可以在此消息中使用多种格式,例如使用 HTML 标记将字体设置为加粗或红色(即 <font color='red'>您没有访问权限;请与管理员联系</font>)。 如果您需要使用自己的 javascript 函数调用布局页,则此属性的查询字符串参数为“accessdenied”。
· 超时消息* – 这是尝试执行 WCF 方法调用时出现超时错误后显示的消息。 它还支持多种格式,例如,将字体设置为加粗、红色等格式。 如果您需要使用自己的 javascript 函数调用布局页,则此属性的查询字符串参数为“timeout”。
· 显示刷新链接 – 选中此框可以在 Azure 数据结果上方呈现刷新图标。 如果单击此图标,则会重新执行 WCF 方法来获取最新数据。
· 刷新样式 – 允许您将其他样式属性添加到用于显示刷新链接的 IMG 标记上的主样式属性中。 例如,您可以使用此属性添加“float:right;”以让刷新图像右对齐。
· 缓存结果 – 选中此框可以让 jQuery 库缓存查询结果。 这意味着页面每次加载时都会使用缓存版本的查询结果。 这将节省往返 Azure 的时间并为最终用户提高性能。 如果它检索的数据不频繁更改,则缓存结果是一个不错的选择。
· 解码结果* – 如果您的 WCF 应用程序返回的结果是 Html 编码,请选中此框。 如果将此属性设置为 true,则 HtmlDecoding 将应用于结果。 大多数情况下,这都不是必需的。 如果您需要使用自己的 javascript 函数调用布局页,则此属性的查询字符串参数为“encode”。
* – 如果自定义控件的 AllowQueryStringOverride 属性设置为 false,将忽略这些属性。
典型用例
假定您的 WCF 方法返回 HTML,那么在大多数情况下您需要将 Web 部件添加到页面中并设置两个或三个属性: “数据页”、“方法名称”和可能的“参数列表”。
如果您对 Azure 返回的数据有更高的显示或处理要求,则可能需要使用自定义 javascript 函数来满足这些要求。 在这种情况下,应将自己的 javascript 添加到页面中并将“成功回调地址”属性设置为您的 javascript 函数的名称。 如果您的部件要求将添加、更新或删除等操作的其他发布返回到 WCF 应用程序,则您应将它添加到自己的 javascript 函数中并使用适当的“方法名称”和“参数列表”值调用自定义布局页;要使用的查询字符串变量名如上所述。 在调用 jQuery 中的 ajax 方法以调用布局页时,您应能够使用类似于 Web 部件所用的方法。 它使用的调用约定基于下面的脚本函数;请注意,您很可能需要继续使用所示的 dataFilter 属性,因为它会删除不是来自 WCF 方法的所有页面输出:
$.ajax({
type: "GET",
url: "/_layouts/SomePage.aspx",
dataType: "text",
data: "methodname=GetCustomerByEmail&methodparams=steve@contoso.local",
dataFilter: AZUREWCF_azureFilterResults,
success: yourSuccessCallback,
error: yourErrorCallback
});
试用一下!
您现在应已具备一切,可以试用端到端解决方案了。 您将在本文的附件中找到一个包括 Web 部件的解决方案的 zip 文件。 在本系列文章的下一篇也是最后一篇文章中,我将介绍您还可以如何使用在第 2 部分中开发的自定义控件从 Azure 中检索数据并在 ASP.NET 缓存中将此数据用于其他控件,以及如何在 SharePoint 任务(在本例中为自定义 SharePoint 计时器作业)中使用此数据。
这是一篇本地化的博客文章。请访问 The Claims, Azure and SharePoint Integration Toolkit Part 4 以查看原文