Windows Azure Platform AppFabr

WindowsAzurePlatformAppFabric是WindowsAzure雲計算服務的一部份,亦為平台即服務(PaaS)的一種類型,它是WindowsAzure上的應用程式伺服器(ApplicationServer)平台,作為開發身份驗證,訪問控制以及服務匯流排(ServiceBus)應用程式之用。它本身也是奠基於WindowsAzure作業系統之上,並且以WCF(WindowsCommunicationFoundation)為核心開發的。

概觀

WindowsAzurePlatformAppFabric一開始命名是.NETService,要作為在WindowsAzure上的.NETFramework特殊服務的一種服務平台,原始的規劃中包含了訪問控制(AccessControl),服務匯流排以及工作流程引擎(WorkflowEngine),但到了2009年的PDC,正式發表AppFabricSDK1.0時,工作流程引擎被抽掉,原因可能是微軟在開發WorkflowEngine時,尚未解決因雲計算特性所導致的分散式運算與狀態集成與管理的問題,因此在AppFabric1.0版中這項服務被抽掉了。
在AppFabric中,每一項服務都有一個服務命名空間(servicenamespace),這個命名空間會作為應用程式調用AppFabric時所使用的URL的一部份[1],
[編輯]服務
AppFabric目前包含兩種服務:訪問控制以及服務匯流排,作為開發企業服務導向架構(SOA)應用程式的基礎平台,同時可與其他不同的驗證服務集成,形成邦聯化驗證與訪問控制服務(FederatedAccessControl)。在2010年10月28日舉辦的PDC2010中,微軟宣布將會在WindowsAzurePlatformAppFabric中加入像Cache,Integration與CompositeApplications等功能,讓WindowsAzureAppFabric在雲應用程式上的作為中介套用程伺服器的角色更明確[2]。
[編輯]訪問控制
訪問控制是AppFabric中作為應用程式用戶身份驗證的資料庫,並作為服務匯流排服務與其他AppFabric上的身份驗證服務。
[編輯]v1.0
AccessControlv1.0遵循OAuthWebResourceAuthorizationProtocol(WRAP)v0.9的規格,可作為企業的單一簽入(SingleSignOn)服務的數據存儲地,當用戶在系統中發出登錄指令時,要求會先送到AppFabric,由AppFabric驗證身份後,回傳以安全符記服務(SecurityTokenService;STS)協定格式傳回身份驗證的數據後,再由應用程式轉送給授權程式,檢查符記的數據內容(會包含部份授權信息)後,授予用戶系統訪問許可權。
訪問控制是由四個部份組成[3]:
TokenPolicy(符記原則):這是驗證的根信息,有了它,才可以創建範圍信息。
Scope(範圍):在這裡會要求記錄應用程式或服務的URL,以作為授權憑據之一。
Issuer(用戶):這是用戶帳戶與密碼的組成,IssuerName是用戶名稱,Key則是密碼,算法目前支持SHA256散列算法,以及使用憑證的X.509算法。
Rule(規則):這是Scope和Issuer組合的配對規則,以登錄用戶是否具有訪問指定範圍的權利。
應用程式開發人員要利用AppFabricSDK中的acm.exe或是AppFabricManagementServices將應用程式訪問控制的四個部份都創建起來後,再改寫Web應用程式,將驗證信息送到AppFabric中驗證:
privatestaticstringGetTokenFromACS()
{
WebClientacsClient=newWebClient();
acsClient.BaseAddress="https://myservice.accesscontrol.windows.net";
NameValueCollectionvalues=newNameValueCollection();
values.Add("wrap_name","myserviceconsumer");
values.Add("wrap_password","jC1n221++AXhzvvZtzQZO7ohsqKR6491N51B6A0UHZE=");
values.Add("wrap_scope","http://localhost/myservice");
byte[]acsResponseInBytes=acsClient.UploadValues("WRAPv0.9",values);
stringacsResponse=Encoding.UTF8.GetString(acsResponseInBytes);
}
當AppFabric驗證後傳回STS授權信息,再由應用程式將它轉給應用程式內的驗證與授權單元進行分析與授權即可。
[編輯]v2.0
為了實行單一簽入並與社區等主要身份驗證提供者(IdentityProvider,IDP)相互介接,AccessControlv2.0開始支持Google,Yahoo,Facebook,WindowsLiveID等支持OpenID或OAuth等主流的身份認證服務,並進一步針對企業內環境的身份認證,提供了介接ActiveDirectoryFederationService(ADFS)v2.0的功能,AccessControlv2.0的用戶先在管理接口中創建橋接機制,當用戶向IdP要求認證通過後,會得到IdPToken,而通過IdPToken可在AccessControlService中交換成ACSToken再送交客戶端程式,之後的流程就和v1.0相同。
ACSv2.0可支持下列協定:
OAuthWRAPv0.9
OAuthv1.0a
WS-Security
WS-Federation
雖然ACSv2.0隻支持Google,Yahoo,Facebook,WindowsLiveID等驗證服務,但如果有新的OpenID認證服務,ACSv2.0也允許由開發人員手動加入。
[編輯]服務匯流排
服務匯流排是要讓WindowsAzure可作為企業服務應用程式前端(顯露服務與轉接信息等)的一個服務,它本身是由WCF所組成,同時由於服務匯流排是負責處理用戶調用的前端接口,基於服務匯流排的特性,AppFabricServiceBus會將要求信息轉送給服務應用程式,這個程式被稱為Relay,因此AppFabricSDK中內含了一個Microsoft.ServiceBus.dll組件,它封裝了改寫WCF通信協定的各項必要組件,像是TCP與HTTP均可以通過ServiceBus進行轉傳,但並不是所有的WCF協定都可以被轉傳,像是MSMQ以及具名管道等都不在受支持之列[4]。
AppFabricServiceBus由於是利用WCF進行通信,因此使用它的服務應用程式也需要以WCF來開發。
下列程式是一個AppFabricServiceBus服務應用程式的簡單示例:
usingSystem;
usingSystem.ServiceModel;
usingSystem.ServiceModel.Description;
usingMicrosoft.ServiceBus;
usingMicrosoft.ServiceBus.Description;
usingSystem.Text;
namespaceMicrosoft.ServiceBus.Samples
{
#regionServiceContract
[ServiceContract(Name="IEchoContract",Namespace="http://samples.microsoft.com/ServiceModel/Relay/EchoV1")]
publicinterfaceIEchoContract
{
[OperationContract]
StringEcho(stringtext);
}
publicinterfaceIEchoChannel:IEchoContract,IClientChannel{};
#endregion
#regionEchoService
[ServiceBehavior(Name="EchoService",Namespace="http://samples.microsoft.com/ServiceModel/Relay/EchoV1")]
publicclassEchoService:IEchoContract
{
publicstringEcho(stringtext)
{
Console.WriteLine("Echoing:{0}",text);
returntext;
}
}
#endregion
#regionHostService
classProgram
{
staticvoidMain(string[]args)
{
ServiceBusEnvironment.SystemConnectivity.Mode=ConnectivityMode.AutoDetect;
//Hard-codetheservicenamespace,issuername,andissuersecretintotheapplication.
//Note:Thecredentialsarehard-codedinthissampleforsimplicitypurposesbutdoingsoisnotconsideredasecureprogrammingpractice.
stringserviceNamespace="putServiceNamespaceHere";
stringissuerName="putIssuerNameHere";
stringissuerSecret="putIssuerSecretHere";
//CreatetheserviceURIbasedonthesolutionname.
Uriaddress=ServiceBusEnvironment.CreateServiceUri("sb",serviceNamespace,"EchoService");
//createthecredentialsobjectfortheENDPOINT
TransportClientEndpointBehaviorsharedSecretServiceBusCredential=newTransportClientEndpointBehavior();
sharedSecretServiceBusCredential.CredentialType=TransportClientCredentialType.SharedSecret;
sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName=issuerName;
sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret=issuerSecret;
//createtheservicehostreadingtheconfiguration
ServiceHosthost=newServiceHost(typeof(EchoService),address);
//createtheServiceRegistrySettingsbehaviorfortheendpoint
IEndpointBehaviorserviceRegistrySettings=newServiceRegistrySettings(DiscoveryType.Public);
//addtheServiceBuscredentialstoallendpointsspecifiedinconfiguration
foreach(ServiceEndpointendpointinhost.Description.Endpoints)
{
endpoint.Behaviors.Add(serviceRegistrySettings);
endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
}
//opentheservice
host.Open();
Console.WriteLine("Serviceaddress:"+address);
Console.WriteLine("Press[Enter]toexit");
Console.ReadLine();
//closetheservice
host.Close();
}
}
#endregion
}
AppFabricServiceBus除了基本的服務通信轉送之外,它還支持了服務登錄(ServiceRegistration),服務搜尋(ServiceDiscovery)以及信息緩衝器(MessageBuffer,類似queue服務)[5]等功能。
[編輯]高速快取服務
WindowsAzureAppFabric的高速快取服務(CachingServices),是以微軟的WindowsServerAppFabric內的CacheService(研發代號為Velocity)為核心所組成,它是與memcached相同能力的分散式高速快取服務(DistributedCacheServices),現階段會直接支持ASP.NET的高速快取API(CacheAPI),不過基於雲的特殊環境,它不支持所有在WindowsServerAppFabricCacheService上支持的高速快取功能,CachingService在2011年4月正式投入商轉,並以高速快取容量(CacheCapability)為單位計費。
CachingService的API相當直覺,以ASP.NET來說,只要設定CacheProvider(ASP.NETv4.0以後的版本)即可直接取用CachingService的服務,或是如下代碼,直接以API來訪問CachingService。
//Declarearrayforcachehost.
DataCacheServerEndpoint[]servers=newDataCacheServerEndpoint[1];
servers[0]=newDataCacheServerEndpoint("mytest.cache.int4.windows-test.net",22233);
//SetupDataCacheSecurityconfiguration.
stringstrACSKey="YWNzOmh0dHBzzzzvanJvdGhkb2N1bWVudGF0aW9udGVzdGluZy111WNoZS5hY2Nlc3Njb250cm9sLmlud"+
"DMud2luZG93cy1pbnQubmV0L1dSQVB2MC45LyZvd25lciY0eDhHZTA5SlZTTUQ2VWIyWkNiaWlES1c0NXNzOFIxZjdWZVp0Y3lF"+
"T2FFPSZodHRwOi8vSnJvdGhEb2N1bWVudGF0aW9uVGVzdGluZy5jYWNoZS5pbnQzLndpbmRvd3MtaW50Lm5ldA==";
varsecureACSKey=newSecureString();
foreach(charainstrACSKey)
{
secureACSKey.AppendChar(a);
}
secureACSKey.MakeReadOnly();
DataCacheSecurityfactorySecurity=newDataCacheSecurity(secureACSKey);
//SetuptheDataCacheFactoryconfiguration.
DataCacheFactoryConfigurationfactoryConfig=newDataCacheFactoryConfiguration();
factoryConfig.Servers=servers;
factoryConfig.SecurityProperties=factorySecurity;
//CreateaconfiguredDataCacheFactoryobject.
DataCacheFactorycacheFactory=newDataCacheFactory(factoryConfig);
//Getacacheclientforthedefaultcache.
DataCachedefaultCache=cacheFactory.GetDefaultCache();
//Addandretrieveatestobjectfromthedefaultcache.
defaultCache.Add("testkey","testobject");
stringstrObject=(string)defaultCache.Get("testkey");
[編輯]集成服務
此條目或章節包含計畫中或預期會發布的未來軟體。
隨著軟體發布日期的臨近或者更多相關可靠訊息的發布,文章的內容可能大幅變動。
集成服務(IntegrationServices)是以biztalkServer的核心引擎為主,通過WindowsAzureAppFabricIntegrationServices的功能,企業可以很快的將應用程式與合作夥伴或第三方應用程式集成。
[編輯]複合式應用程式
此條目或章節包含計畫中或預期會發布的未來軟體。
隨著軟體發布日期的臨近或者更多相關可靠訊息的發布,文章的內容可能大幅變動。
複合式應用程式(CompositeApplication)是WindowsAzureAppFabric身為中間層應用程式伺服器服務的最重要組件,它除了能讓企業在雲上實現工作流程應用程式(WorkflowApplication),更可以集成現有在雲上的應用程式,不論是WindowsAzure本身的或是WindowsAzureAppFabric內的各項服務,都可以運用這個複合式應用程式模型(CompositionModel)來發展複雜的企業套用。
[編輯]應用程式開發支持
AppFabric的訪問控制以及ServiceBus的必要功能,都顯露了RESTAPI供不同的客戶端訪問,開發人員只需要利用這些API即可訪問AppFabric中的服務,尤其是AccessControl在創建帳戶這個程式上,若利用RESTAPI會較使用acm.exe工具快很多。
同時,AppFabricSDK也包含了檔案以及ServiceBus所必要的組件(即Microsoft.ServiceBus.dll),以供開發人員使用[6]。

相關詞條

熱門詞條

聯絡我們