宣告、Azure 與 SharePoint 整合工具組第 3 部分
宣告、Azure 與 SharePoint 整合工具組第 3 部分
這是 CASI (宣告、Azure 與 SharePoint 整合) 套件的第 3 部分 (共 5 個部分)。 第 1 部分: 是整個架構與解決方案的簡介,並說明此系列嘗試執行和涵蓋的內容。 第 2 部分: 包含建立 WCF 應用程式以及使其成為宣告感知,然後將它們移到 Windows Azure 的指示。 在這篇文章中,我將討論架構中較重要的項目,也就是可讓您從 SharePoint 連線至 Windows Azure 中所裝載的 WCF 應用程式的自訂控制項基礎類別。 以下是我們將包含的項目:
· 基礎類別 – 它是什麼、您如何在專案中使用它
· 版面配置頁面 – 如何將新控制項新增至 _layouts 目錄的網頁中
· 重要的屬性 – 暸解基礎類別中的一些重要屬性
CASI 套件基礎類別
CASI 套件的其中一個主要項目是自訂控制項的基礎類別,它可連線至 WCF 應用程式,並提交目前使用者的登入 Token 要求。 基礎類別本身是一種標準的 ASP.NET 伺服器控制項,而要實作這個開發模式會要求您建立繼承自此基礎類別的新 ASP.NET 伺服器控制項。 因某些本文未提及的原因,您的控制項需要執行以下兩項動作:
1. 建立在 Windows Azure 中裝載的 WCF 應用程式參照。
2. 覆寫基礎類別上的 ExecuteRequest 方法。 這實際上相當簡單,因為您只需要撰寫大約 5 行的程式碼,並在程式碼中建立和設定要連線至 WCF 應用程式的 Proxy,然後呼叫基礎類別的 ExecuteRequest 方法。
若要開始使用這個項目,您可以在 Visual Studio 中建立新的專案,並選擇 Windows Class Library 類型專案。 將命名空間與類別名稱變更成您要的內容後,您需要新增 CASI 套件基礎類別的參照,這個基礎類別位於 AzureConnect.dll 組件中。 您也需要將參照新增至下列組件: Microsoft.SharePoint、System.ServiceModel、System.Runtime.Serialization 及 System.Web。
在基礎類別中,新增 Microsoft.SharePoint 使用的陳述式,然後變更您的類別讓它繼承自 AzureConnect.WcfConfig。 WcfConfig 是一種包含所有連線至 WCF 應用程式程式碼與邏輯的基礎類別,會合併所有的屬性讓實作更加彈性化,並可讓您省略連線至 WCF 服務端點通常需要的一般 web.config 變更。 瞭解這點是非常重要的 – 您通常需要針對所要連線的 WCF 應用程式變更大約 100 行的 web.config 到每個使用 web.config 檔案的 Web 應用程式中每台伺服器上的每個 web.config 檔案。 WcfConfig 基礎類別會將這些全封裝在控制項本身內,您可以直接從控制項繼承這些類別,然後直接執行所有工作。 不過,所有要在 web.config 檔案中變更的屬性也可以在 WcfConfig 控制項中變更,因為該控制項會公開所有的屬性。 我將在本節中進一步討論重要的屬性。
現在可以開始將新的「服務參照」新增至在 Windows Azure 中裝載的 WCF 應用程式。 在此不需要為 CASI 套件執行任何動作 – 只要以滑鼠右鍵按一下專案中的 [參照],然後選取 [新增服務參照] 即可。 使用 “?WSDL” 將 URL 外掛到 Azure WCF 應用程式的結尾,使其可為服務實作擷取 WSDL。 然後將名稱變更為您要的名稱並新增參照,這個部分即完成。
此時,您會有一個空的類別和 WCF 應用程式的服務參照。 現在要說明程式碼撰寫部分,還好這個部分很小。 您需要覆寫 ExecuteRequest 方法、建立和設定服務類別 Proxy,然後呼叫基礎類別的 ExecuteRequest 方法。 為了讓您更容易暸解,以下是我附加至此文章的範例控制項完整程式碼;我已經將您要變更以符合服務參照的部分以 黃色 標示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using Microsoft.SharePoint;
//requires References to:
//1. AzureConnect
//2. Microsoft.SharePoint
//3. System.ServiceModel
//4. System.Runtime.Serialization
//5. System.Web
namespace AzureWcfPage
{
public class WcfDataControl : AzureConnect.WcfConfig
{
//this method must be overridden so the proxy can be
//configured and created correctly
public override bool ExecuteRequest()
{
try
{
//create the proxy instance with bindings and endpoint the base class
//configuration control has created for this
CustomersWCF.CustomersClient cust =
new CustomersWCF.CustomersClient(this.FedBinding,
this.WcfEndpointAddress);
//configure the channel so we can call it with
//FederatedClientCredentials.
SPChannelFactoryOperations.ConfigureCredentials<CustomersWCF.ICustomers>
(cust.ChannelFactory,
Microsoft.SharePoint.SPServiceAuthenticationMode.Claims);
//create a channel to the WCF endpoint using the
//token and claims of the current user
CustomersWCF.ICustomers claimsWCF =
SPChannelFactoryOperations.CreateChannelActingAsLoggedOnUser
<CustomersWCF.ICustomers>(cust.ChannelFactory,
this.WcfEndpointAddress,
new Uri(this.WcfEndpointAddress.Uri.AbsoluteUri));
//set the client property for the base class
this.WcfClientProxy = claimsWCF;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
//now that the configuration is complete, call the method
return base.ExecuteRequest();
}
}
}
這就是您要執行的程式碼 – 基本只有 5 行,您只需直接複製這裡顯示的 ExcecuteRequest 覆寫程式碼,並將它貼到自己的覆寫中。這樣做之後,您只需以適當的 WCF 應用程式公開類別與介面取代黃色部分即可。 在前面標示的程式碼中:
· CustomersWCF.CustomersClient: “CustomersWCF” 是我建立服務參照時所使用的名稱,而 CustomersClient 是我透過 WCF 應用程式所公開的類別名稱。 我的 WCF 中的類別名稱實際上是 “Customers”,而 VS.NET 新增服務參照工具會將 “Client” 部分新增至結尾。
· CustomersWCF.ICustomers: “CustomersWCF” 與上方所述相同。 “ICustomers” 是在我的 WCF 應用程式中所建立的介面,也是我的 WCF “Customers” 類別實際實作的介面。
這就是您需要撰寫的所有程式碼 – 這些程式碼可讓您連線回 Windows Azure 裝載的 WCF 應用程式。 希望您也覺得這很簡單。 我稍微解釋一下,您撰寫的程式碼是允許您呼叫 WCF 應用程式以傳遞 SharePoint 使用者 Token 的主要工具。 關於此內容,我的另一篇文章中有更詳細的說明: https://blogs.technet.com/b/speschka/archive/2010/09/08/calling-a-claims-aware-wcf-service-from-a-sharepoint-2010-claims-site.aspx (可能為英文網頁)。
既然程式碼已完成,請務必在使用程式碼的每台伺服器「全域組件快取」中同時註冊基礎類別與新自訂控制項。 您可以透過 SharePoint 解決方案輕鬆完成這個動作。 在完成和註冊控制項後,現在我們來暸解一下如何使用它來擷取和轉譯資料。 在 CASI 套件中,我嘗試解決使用 Azure 資料常見的三個核心情況:
1. 使用網頁組件在 SharePoint 網頁中顯示內容
2. 擷取設定資料以供一對多控制項使用,並將它儲存在 ASP.NET 快取中
3. 擷取資料並將它用於工作類型可執行檔,例如 SharePoint 計時器工作
第一個案例是最普遍的情況,我們先處理這個案例。 擬定方法後,最簡單的作法就是建立一個自訂網頁組件,以便在 Load 事件期間 (或是類似的事件) 發出所有的呼叫。 不過,這將會是一個「大」錯誤。 藉由在網頁組件本身包裝程式碼,會導致在網頁要求處理期間執行伺服器端,這可能會使伺服器陣列的整體輸送量大幅降低。 我非常擔心網頁上的一對多網頁組件,在應用程式與資料中心之間發出一對多的延遲呼叫來擷取資料,這樣很容易發生因大量使用而導致整個伺服器陣列癱瘓的情況。 不過,部分程式碼必須在伺服器上執行此項要求,因為必須這樣做才能設定 WCF 應用程式通道以傳送使用者 Token 及要求。 我的解決方案是由兩個組件所組成:
1. 在 _layouts 資料夾中裝載的自訂頁面。 它包含我們前面所撰寫的自訂控制項,而且會實際轉譯從 WCF 呼叫傳回的資料。
2. 在伺服器端執行「無程式碼」的自訂網頁組件,但是改用 JavaScript 與 jQuery 以呼叫 _layouts 資料夾中的網頁。 它會讀取從網頁傳回的資料,將該資料交給 JavaScript 函數,這個函數預設只會轉譯網頁組件中的內容。 當然在網頁組件還有許多其他功用,我將在下一篇文章中更詳細地探討網頁組件。 不過,網路會在使用者要求網頁時立即處理它,而不必對 WCF 應用程式發出任何其他潛在的呼叫。 網頁會經由處理管線立即到達使用者瀏覽器。 接著在完全載入網頁後,發出呼叫只擷取 WCF 內容。
版面配置頁面
裝載自訂控制項的版面配置頁面實際上非常容易撰寫。 我在 [記事本] 中花了五分鐘就完成這一切。 希望你的速度比我更快,我在這裡複製和貼上我的版面配置頁面,並說明您需要在網頁中取代的內容。
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase,Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" MasterPageFile="~/_layouts/simple.master" %>
<%@ Assembly Name="Microsoft.SharePoint.ApplicationPages, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Assembly Name="AzureConnect, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c0b51bd3d3b33212"%>
<%@ Register Tagprefix="AzWcf" Namespace="AzureWcfPage" Assembly="AzureWcfPage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ed63b2f4046026" %>
<asp:Content ID="Content1" ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
<SharePoint:EncodedLiteral ID="wcfConnectPageTitle" runat="server" text="Azure Wcf Connect Page" EncodeMethod='HtmlEncode'/>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderId="PlaceHolderPageTitleInTitleArea" runat="server">
<SharePoint:EncodedLiteral ID="wcfConnectPage" runat="server" text="Azure Wcf Connect Page" EncodeMethod='HtmlEncode'/>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderId="PlaceHolderSiteName" runat="server"/>
<asp:Content ID="Content4" ContentPlaceHolderId="PlaceHolderMain" runat="server">
<AzWcf:WcfDataControl runat="server" id="wcf" WcfUrl="https://azurewcf.vbtoys.com/Customers.svc" OutputType="Page" MethodName="GetAllCustomersHtml" />
</asp:Content>
網頁本身的實作真的很容易。 一定必須變更的是自訂控制項組件的強式名稱。 為了便於說明,我在控制項標籤本身中標示了部分屬性。 這些屬性是我的 WCF 服務特有的屬性,它們可以變更,甚至在某些情況下可從您的實作中整個移除。 以下我會更詳盡地討論這些屬性。 在建立版面配置頁面後,您需要將它分散到 SharePoint 伺服器陣列中每台 Web 前端伺服器上的 _layouts 目錄。 此時,即可從 SharePoint 伺服器陣列中任何宣告型感知 Web 應用程式內的任何網站呼叫它。 很明顯地,您不應該預期它可以在傳統驗證網站中運作,例如,管理中心。 在部署網頁後,CASI 套件網頁組件即可使用它,在此系列的第 4 部分將詳細說明這點。
重要屬性
WcfConfig 包含兩大類別的屬性 – 用於設定到 WCF 應用程式的通道與連線的屬性,以及設定控制項本身使用方式的屬性。
WCF 屬性
如稍早所述,通常包含在 web.config 檔案中的 WCF 應用程式設定資訊已經封裝至 WcfConfig 控制項中。 然而,幾乎所有的屬性都已經公開,可以視您的實作需求修改它們。 兩項重要的例外狀況是郵件安全性版本 (一律是 MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10) 及傳輸 (一律是 HTTPS,「不是 HTTP」)。 控制項有部分屬性可讓您更瞭解您的實作 (雖然通常您不需要變更它們)。
首先,有五個唯讀屬性會公開設定中使用的頂層設定物件。 唯讀的意思是指物件本身是唯讀的,但是如果以程式設計方式使用控制項,還是可以個別設定這些屬性。 這五個屬性為:
SecurityBindingElement SecurityBinding
BinaryMessageEncodingBindingElement BinaryMessage
HttpsTransportBindingElement SecureTransport
WS2007FederationHttpBinding FedBinding
EndpointAddress WcfEndpointAddress
其他屬性全可以在新增至版面配置 aspx 網頁的控制項標籤中設定。 我針對這些屬性使用命名慣例的原因,是希望它們也能在複合屬性值中使用。 例如,SecurityBinding 屬性具有稱為 LocalClient 的屬性,它擁有稱為 CacheCookies 的布林值屬性。 為了讓您更易於瞭解和使用,我只建立一個稱為 SecurityBindingLocalClientCacheCookies 的屬性。 您將會看到數個類似的屬性,這也是讓您在查看 .NET Framework SDK 時知道如何尋找適當屬性的線索,並瞭解如何在基礎類別實作中修改某些屬性值。 以下是完整的屬性清單:
SecurityAlgorithmSuite SecurityBindingDefaultAlgorithmSuite
SecurityHeaderLayout SecurityBindingSecurityHeaderLayout
SecurityKeyEntropyMode SecurityBindingKeyEntropyMode
bool SecurityBindingIncludeTimestamp
bool SecurityBindingLocalClientCacheCookies
bool SecurityBindingLocalClientDetectReplays
int SecurityBindingLocalClientReplayCacheSize
int SecurityBindingLocalClientMaxClockSkew
int SecurityBindingLocalClientMaxCookieCachingTime
int SecurityBindingLocalClientReplayWindow
int SecurityBindingLocalClientSessionKeyRenewalInterval
int SecurityBindingLocalClientSessionKeyRolloverInterval
bool SecurityBindingLocalClientReconnectTransportOnFailure
int SecurityBindingLocalClientTimestampValidityDuration
int SecurityBindingLocalClientCookieRenewalThresholdPercentage
bool SecurityBindingLocalServiceDetectReplays
int SecurityBindingLocalServiceIssuedCookieLifetime
int SecurityBindingLocalServiceMaxStatefulNegotiations
int SecurityBindingLocalServiceReplayCacheSize
int SecurityBindingLocalServiceMaxClockSkew
int SecurityBindingLocalServiceNegotiationTimeout
int SecurityBindingLocalServiceReplayWindow
int SecurityBindingLocalServiceInactivityTimeout
int SecurityBindingLocalServiceSessionKeyRenewalInterval
int SecurityBindingLocalServiceSessionKeyRolloverInterval
bool SecurityBindingLocalServiceReconnectTransportOnFailure
int SecurityBindingLocalServiceMaxPendingSessions
int SecurityBindingLocalServiceMaxCachedCookies
int SecurityBindingLocalServiceTimestampValidityDuration
int BinaryMessageMaxReadPoolSize
int BinaryMessageMaxWritePoolSize
int BinaryMessageMaxSessionSize
int BinaryMessageReaderQuotasMaxDepth
int BinaryMessageReaderQuotasMaxStringContentLength
int BinaryMessageReaderQuotasMaxArrayLength
int BinaryMessageReaderQuotasMaxBytesPerRead
int BinaryMessageReaderQuotasMaxNameTableCharCount
System.Net.AuthenticationSchemes SecureTransportAuthenticationScheme
System.ServiceModel.HostNameComparisonMode SecureTransportHostNameComparisonMode
System.Net.AuthenticationSchemes SecureTransportProxyAuthenticationScheme
System.ServiceModel.TransferMode SecureTransportTransferMode
bool SecureTransportManualAddressing
long SecureTransportMaxBufferPoolSize
long SecureTransportMaxReceivedMessageSize
bool SecureTransportAllowCookies
bool SecureTransportBypassProxyOnLocal
bool SecureTransportKeepAliveEnabled
int SecureTransportMaxBufferSize
string SecureTransportRealm
bool SecureTransportUnsafeConnectionNtlmAuthentication
bool SecureTransportUseDefaultWebProxy
bool SecureTransportRequireClientCertificate
HostNameComparisonMode FedBindingHostNameComparisonMode
WSMessageEncoding FedBindingMessageEncoding
Encoding FedBindingTextEncoding
SecurityAlgorithmSuite FedBindingSecurityMessageAlgorithmSuite
SecurityKeyType FedBindingSecurityMessageIssuedKeyType
bool FedBindingSecurityMessageNegotiateServiceCredential
int FedBindingCloseTimeout
int FedBindingOpenTimeout
int FedBindingReceiveTimeout
int FedBindingSendTimeout
bool FedBindingBypassProxyOnLocal
bool FedBindingTransactionFlow
long FedBindingMaxBufferPoolSize
long FedBindingMaxReceivedMessageSize
bool FedBindingUseDefaultWebProxy
int FedBindingReaderQuotasMaxDepth
int FedBindingReaderQuotasMaxStringContentLength
int FedBindingReaderQuotasMaxArrayLength
int FedBindingReaderQuotasMaxBytesPerRead
int FedBindingReaderQuotasMaxNameTableCharCount
bool FedBindingReliableSessionOrdered
int FedBindingReliableSessionInactivityTimeout
bool FedBindingReliableSessionEnabled
屬性已經全部建立,現在可以在版面配置 aspx 網頁的控制項標籤中直接加以修改。 例如,以下是設定 FedBindingUseDefaultWebProxy 屬性的方法:
<AzWcf:WcfDataControl runat="server" id="wcf" WcfUrl="https://azurewcf.vbtoys.com/Customers.svc" OutputType="Page" MethodName="GetAllCustomersHtml" FedBindingUseDefaultWebProxy="true" />
使用方式屬性
控制項的其他屬性是設定來控制使用方式的。 雖然屬性清單有點冗長,但這些屬性主要是為了讓您可更彈性地操控控制項 – 在簡單的情況下,您只需要設定一或兩個屬性,或只在網頁組件中設定這些屬性,這將在本系列的第 4 部分進一步說明。 以下是清單中每個屬性的簡短說明。
string WcfUrl – 這是 WCF 服務端點的 URL,也就是 https://azurewcf.vbtoys.com/Customers.svc。
string MethodName – 這是要求網頁時,應該呼叫的方法名稱。 您可以將此項目設定成預設呼叫的方法。 此外,您也可以將 AllowQueryStringOverride 屬性設定為 false,這會使用您在控制項標籤中定義的 MethodName,將網頁限制為 ONLY。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
string MethodParams – 這是以分號分隔的參數值清單,這些參數值必須傳遞至方法呼叫。 傳遞的順序必須與方法簽章中所顯示的順序相同。 如本部落格系列第 2 部分中的說明,參數值只支援簡單的資料類型,例如 string、bool、int 及 datetime。 如果您希望以方法參數傳遞更複雜的物件,則需要將參數設為字串,在呼叫方法之前,請先將物件還原序列化為 XML,然後在 WCF 應用程式中將字串序列化回物件執行個體。 如果以查詢字串參數傳遞,將會受限於瀏覽器與 IIS 支援查詢字串長度的上限。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
object WcfClientProxy – 實際上,WcfClientProxy 會對 WCF 應用程式發出呼叫。 您需要設定它以支援在呼叫中傳遞使用者 Token,這就是為什麼在 ExecuteRequest 覆寫的自訂控制項內,您最後撰寫的設定程式碼是將此 Proxy 物件設定為您建立並設定使用目前用戶端認證的服務應用程式 Proxy。
string QueryResultsString – 此屬性包含從方法呼叫傳回的結果字串表示法。 如果您的 WCF 方法傳回 bool、int、string 或 datetime 等簡單的資料類型,則此屬性值將會傳回值 ToString()。 您的 WCF 方法也可以傳回自訂類別 – 當基礎類別取得傳回值時,會將它還原序列化為字串,這樣您就會具有資料的 XML 表示法。
object QueryResultsObject – 此屬性包含從方法呼叫傳回的結果物件表示法。 以程式設計方式使用控制項時非常有用。 例如,如果您使用控制項擷取儲存在 ASP.NET 快取中的資料,或在 SharePoint 計時器工作中使用控制項,則 QueryResultsObject 屬性會具有 WCF 方法呼叫傳回的值。 如果它是自訂類別,則您可以將此屬性的結果轉換為適當的類別類型來使用。
DataOutputType OutputType – OutputType 屬性可以是下列其中一個值: Page、ServerCache、Both 或 None。 如果使用版面配置頁面中的控制項,且使用網頁組件轉譯結果,則 OutputType 應該是 Page 或 Both。 如果要擷取資料並將它儲存在 ASP.NET 快取中,則應該使用 ServerCache 或 Both。 附註: 在快取中儲存結果時,「只會」儲存 QueryResultsObject。 很明顯地,Both 會轉譯資料並將資料儲存在 ASP.NET 快取中。 如果您只是以程式設計方式在類似 SharePoint 計時器工作中使用控制項,則您可以將此屬性設定為 None,因為在呼叫 ExecuteRequest 方法後,您只能讀取 QueryResultsString 或 QueryResultsObject。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
string ServerCacheName – 如果您選擇 ServerCache 或 Both 的 OutputType,則需要將 ServerCacheName 屬性設定為非空白的字串值,否則將發生例外狀況。 這是用來儲存 ASP.NET 快取結果的關鍵因素。 例如,如果您將 ServerCacheName 屬性設定為 “MyFooProperty”,則在呼叫 ExecuteRequest 方法後,即可參照 HttpContext.Current.Cache["MyFooProperty"] 以擷取從 WCF 應用程式傳回的物件。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
int ServerCacheTime – 這是將項目加入 ASP.NET 快取所應保留的時間 (以分鐘為單位)。 如果您將 OutputType 屬性設定為 ServerCache 或 Both,您必須同時也將此屬性設定為非零值,否則會發生例外狀況。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
bool DecodeResults – 萬一 WCF 應用程式傳回的結果是 HtmlEncoded,則需要使用此屬性。 如果您將此屬性設定為 True,則會將 HtmlDecoding 套用至結果。 在大多數情況下,這是不必要的。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
string SharePointClaimsSiteUrl – 這個屬性主要用於您在 Http 要求外以程式設計方式建立控制項的案例,例如,在 SharePoint 計時器工作中。 根據預設,當透過網頁組件提出要求時,基礎類別將使用目前網站的 URL 連線至 SharePoint STS 端點,進而提供使用者 Token 給 WCF 呼叫。 不過,如果您以程式設計方式建立控制項且沒有 Http 內容,則可以將此屬性設定為受宣告保護的 SharePoint 網站 URL,並使用該網站來存取 SharePoint STS。 例如,您永遠不需要在版面配置頁面的控制項標籤中設定此屬性,因為在呼叫該頁時,您永遠都會有 Http 內容。
bool AllowQueryStringOverride – 此屬性可讓系統管理員有效地在版面配置頁面中鎖定控制項標籤。 如果將 AllowQueryStringOverride 設定為 False,則會忽略將從 CASI 套件網頁組件傳遞的任何查詢字串覆寫值。
string AccessDeniedMessage – 這是當拒絕使用者存取特定方法時,應該顯示在 CASI 套件網頁組件中的「拒絕存取」錯誤訊息。 例如,如本系列第 2 個部分中的說明,既然我們要傳遞使用者的 Token 給 WCF 呼叫,我們可以利用 PrincipalPermission 需求修飾所有方法,例如「此使用者必須隸屬於 Sales Managers」群組。 如果使用者不符合 PrincipalPermission 需求,WCF 呼叫將因拒絕存取錯誤而失敗。 在此情況下,網頁組件將會顯示 AccessDeniedMessage 所有的內容。 請注意,您可以在此訊息中透過 HTML 標籤使用豐富的格式設定,例如將字型設為粗體或紅色 (亦即 <font color='red'>您沒有存取權,請連絡您的系統管理員</font>)。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
string TimeoutMessage – 執行 WCF 方法呼叫發生逾時錯誤時,將顯示在 CASI 套件網頁組件中的訊息。 它也支援豐富的格式設定,例如將字型設為粗體、紅色等等。 這個屬性可以使用 CASI 套件網頁組件透過查詢字串來設定。
本篇文章相當長,而它也是本系列中最長的文章,因為這是 CASI 套件最重要的核心部分。 在下一篇文章中,我將說明 CASI 套件隨附的網頁組件,使用此步驟開發的自訂控制項與版面配置頁面從 WCF 應用程式轉譯資料的方式。
另外,在本篇文章中所附加的 zip 檔案內含我建立的範例 Visual Studio 2010 專案,這個專案包括 CASI 套件基礎類別組件、從 CASI 套件基礎類別繼承的自訂控制項,以及我的自訂版面配置頁面。
這是翻譯後的部落格文章。英文原文請參閱 The Claims, Azure and SharePoint Integration Toolkit Part 3