簡體   English   中英

以C#編程創建內容數據庫(SP 2013)

[英]Programmatically create content database in C# (SP 2013)

目標是擁有一個Web用戶界面,其中包含使用新內容數據庫創建新網站集的選項。

使用admin用戶,我可以在CA中手動創建新的內容數據庫。 我還可以在此內容數據庫中創建新的網站集。

想法是創建一個事件接收器(C#)。 如果用戶將數據添加到表中,則執行上述操作。

實驗:a)控制台應用程序 - 工作!

using (SPSite site = new SPSite("http://sp2013")) {
  using (SPWeb spWeb = site.OpenWeb()) {
      SPWebApplication elevatedWebApp = spWeb.Site.WebApplication;
        elevatedWebApp.ContentDatabases.Add("sp2013", "WSS_Content_80_" + DateTime.Now.ToString("yyyymmddhhMMss"), null, null, 10, 15, 0);
    }
}

b)事件接收器 - 僅創建網站集工作,創建內容數據庫不起作用! 錯誤:訪問被拒絕。

c)Web服務 - 不起作用! 錯誤:訪問被拒絕。

那么,為什么我在創建網站集時會收到錯誤Access Denied,但是只創建內容數據庫?

最后我執行了PS腳本 - 但這也行不通。

# AUTHOR: Paul Kotlyar
# CONTACT: unclepaul84@gmail.com
# DESCRIPTION: sets an option on content web service that allows updating of SP Administration objects such as SPJobDefinition from content web applications
function Set-RemoteAdministratorAccessDenied-False()
{
    # load sharepoint api libs
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration") > $null

  # get content web service
 $contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
  # turn off remote administration security
 $contentService.RemoteAdministratorAccessDenied = $false
  # update the web service
 $contentService.Update()
}

也許有人知道解決方案?

我在Stackexchange中問了同樣的問題。

這是權限問題,但不適用於客戶帳戶。 客戶端用戶無關緊要。 問題是,對於內容數據庫創建,您的代碼需要服務器場管理員權限。 但是,使用提升的權限運行代碼是不夠的,因為當您以這種方式執行代碼時,SharePoint會模擬對應Web應用程序的應用程序池用戶。

如果“ http:// sp2013 ”的應用程序池用戶沒有場管理員權限,則無法使用事件接收器創建內容數據庫(可能因此您的事件接收器和Web服務代碼存在“拒絕訪問”錯誤)。 問題是給予應用程序池或服務用戶農場管理員權限這是一個非常糟糕的主意。

我建議您將此解決方案實現為計時器作業。 您可以創建SharePoint場解決方案,並創建計時器作業,因為通常使用場管理員帳戶執行計時器作業。 通過這種方式,您可以創建內容數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM