上一篇我講解了如何利用微軟提供的Office 365開發人員網站,進行在線的SharePoint App開發,這當然是不錯的一個選擇,因為你可以快速地進行開發和調試。(僅僅針對App開發而言)。但是,你可能會想到一個問題,假設我們在企業中已經有了一組SharePoint Server服務器,那么如何讓他們也能用來進行App開發、部署並且最終用來統一管理所有的App呢?這一篇文章我們將揭開這個面紗。
關於這個配置過程,微軟官方也有一個文檔(http://msdn.microsoft.com/en-us/library/fp179923(office.15).aspx),我下面總結的方法可能與官方的文檔有些不一樣。但這是我驗證下來有效的方法。但我建議你也將官方的文檔看一遍。
第一步:配置泛域名解析,並且禁用回環檢查
為什么要配置這個域名解析呢?上一篇我已經提到了App最終使用的時候,有一個很特殊的地址,例如
也就是說,所有的App,其實都是共用了一個域名 sharepoint.com。但有一個特殊的前綴(你的站點標識,一個App序列號),並且有一個特殊的后綴(App的名稱)。
如果我們希望配置自己的服務器也能實現這樣的功能,就需要用到一個泛域名解析的功能。也就是說,不管App具體的序列號是多少,我們都解析到同一個地址。
要實現這樣的功能,請登錄到你配置的DNS服務器,在正向查找區域中添加一個主機名
用*(星號)作為主機名,IP地址寫127.0.0.1,就是讓它指向本地服務器。
如何驗證這個功能是否生效呢?很簡單,我們開一個命令行提示符。隨便ping兩個域名,分別用apps和my作為前綴,我們看到都能ping通,而且他們返回的地址都是127.0.0.1
修改兩個注冊表選項,來禁止環回檢查
1. 啟動注冊表編輯器 (Regedt32.exe)。
2. 在注冊表中找到並單擊以下項:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters
3. 在編輯菜單上,單擊添加數值,然后添加以下注冊表值:
數值名稱:DisableStrictNameChecking
數據類型:REG_DWORD
基數:十進制
數值: 1
2. 在注冊表編輯器中,找到並單擊下面的注冊表項:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
3. 右鍵單擊“Lsa”,指向“新建”,然后單擊“DWORD 值”。
4. 鍵入 DisableLoopbackCheck,然后按 Enter。
5. 右鍵單擊 DisableLoopbackCheck,然后單擊“修改”。
6. 在“數值數據”框中,鍵入 1,然后單擊“確定”。
7. 退出注冊表編輯器,然后重新啟動您的計算機。
第二步:配置SharePoint服務和服務應用程序
請將如下的代碼保存為一個ps1文件,例如命令為enableappscript.ps1,放在c:\scripts目錄中,紅色字體部分可能需要修改為你的域名
$appManagementService = Get-SPServiceInstance | where {$_.TypeName -like 'App Management Service'} if($appManagementService.Status -ne 'Online') { Write-Host 'Starting App Management Service' Start-SPServiceInstance $appManagementService | Out-Null } else{ Write-Host 'App Management Service was already started' } # wait for App Management Service to start” while ($service.Status -ne 'Online') { # delay 5 seconds then check to see if service has started sleep 5 $service = Get-SPServiceInstance | where {$_.TypeName -like 'App Management Service'} } $subscriptionSettingsService = Get-SPServiceInstance | where {$_.TypeName -like 'Microsoft SharePoint Foundation Subscription Settings Service'} if($subscriptionSettingsService.Status -ne 'Online') { Write-Host 'Starting Subscription Settings Service' Start-SPServiceInstance $subscriptionSettingsService | Out-Null } else{ Write-Host 'Subscription Settings Service was already started' } while ($service.Status -ne 'Online') { # delay 5 seconds then check to see if service has started sleep 5 $service = Get-SPServiceInstance | where {$_.TypeName -like 'Microsoft SharePoint Foundation Subscription Settings Service'} } $appManagemetnServiceApplicationName = 'App Management Service' $appManagementServiceApplication = Get-SPServiceApplication | where {$_.Name -eq $appManagemetnServiceApplicationName} # create an instance App Management Service Application and proxy if they do not exist if($appManagementServiceApplication -eq $null) { Write-Host 'Creating App Management Service Application' $pool = Get-SPServiceApplicationPool 'SharePoint Web Services Default' $appManagementServiceDB= 'Sharepoint_AppManagementServiceDB' $appManagementServiceApplication = New-SPAppManagementServiceApplication ` -ApplicationPool $pool ` -Name $appManagemetnServiceApplicationName ` -DatabaseName $appManagementServiceDB Write-Host 'Creating App Management Service Application Proxy' $appManagementServicApplicationProxy = New-SPAppManagementServiceApplicationProxy ` -ServiceApplication $appManagementServiceApplication } else{ Write-Host 'App Management Service Application already exist' } $subscriptionSettingsServiceApplicationName = 'Subscription Settings Service Application' $subscriptionSettingsServiceApplication = Get-SPServiceApplication | where {$_.Name -eq $subscriptionSettingsServiceApplicationName} # create an instance Subscription Service Application and proxy if they do not exist if($subscriptionSettingsServiceApplication -eq $null) { Write-Host 'Creating Subscription Settings Service Application' $pool = Get-SPServiceApplicationPool 'SharePoint Web Services Default' $subscriptionSettingsServiceDB= 'Sharepoint_SiteSubscriptionSettingsServiceDB' $subscriptionSettingsServiceApplication = New-SPSubscriptionSettingsServiceApplication ` -ApplicationPool $pool ` -Name $subscriptionSettingsServiceApplicationName ` -DatabaseName $subscriptionSettingsServiceDB Write-Host 'Creating Subscription Settings Service Application Proxy' $subscriptionSettingsServicApplicationProxy = New-SPSubscriptionSettingsServiceApplicationProxy ` -ServiceApplication $subscriptionSettingsServiceApplication } else{ Write-Host 'Subscription Settings Service Application already exist' } Set-SPAppDomain 'apps.corp.contoso.com' -Confirm:$false Set-SPAppSiteSubscriptionName -Name 'app' -Confirm:$false
上面的代碼其實說復雜也不復雜,它會檢查兩個服務的狀態,如果沒有啟動,則會啟動他們
- App Management Service
- Microsoft SharePoint Foundation Subscription Settings Service
然后,它會檢查是否存在下面兩個服務應用程序,如果不存在,則會創建並且啟動他們
- App Management Service Application
- Subscription Settings Service Application
然后,它會注冊一個域名(apps.corp.contoso.com)和地址前綴(app)。
第三步:創建App Catalog
接下來我們要做的是創建一個所謂的App Catalog,這個相當於是一個存儲App的具體位置。
經過上面三個步驟,我們就能通過Visual Studio來測試開發一個簡單的App,並且看看部署起來的效果了
默認生成的項目結構中有一些腳本文件,CSS文件,並且還有一個aspx頁面。【備注:具體App的開發細節以后會有文章介紹,這里不做展開】
我這里不准備對其做任何修改,直接選擇解決方案,然后選擇“部署解決方案”即可,如果不出意外的話,你應該能部署成功。
【備注】如果你直接使用安裝SharePoint Farm的賬號打開Visual Studio ,創建App項目並且部署,你會發現其實是部署不了的,錯誤消息如下。
解決方法就是再創建一個賬號,用這個賬號登陸來做開發,並且將這個賬號添加為Farm Administrator,默認網站集的Site collection administrator,並且在數據庫服務器中,將其添加為sysadmin這個角色。
如果完成了部署,你可以打開默認的站點,在左側導航區域會出現剛剛你建立和部署的App的鏈接。點擊這個鏈接,可以運行這個App(其實是打開了其中的Default.aspx頁面)
【備注】實際上,你如果第一次打開的話,可能會要求你輸入用戶名和密碼。我是通過設置了IE選項,而避免了每次輸入用戶名和密碼的。
首先,我將*.apps.corp.contoso.com添加到了信任站點
然后,我設置了信任站點的安全選項,讓它自動地以當前用戶的身份登陸。