1

有沒有辦法讓共享點應用程序託管的當前服務器的根網址?例如,如果我想加載從網站的信息目前我打字:如何在Share Point 2010項目中找到根站點URL?

SPSite site = new SPSite(http://dev3); 

但是,當我開發的代碼移動到生產服務器我有一個新的服務器的URL手動更換網站的網址:

SPSite site = new SPSite(http://sp2010); 

我使用C#在Visual Studio 2010

回答

4

如果你想獲得當前機器的主機名,那就是:

System.Net.Dns.GetHostName() 

如果您使用SharePoint對象模型尋找的東西,試試這個:

new SPSite(SPServer.Local.Address.ToString()) 
+0

。 – 2011-05-10 12:27:20

6

我不知道如果我理解正確的情況下,但你應該能夠使用SPContextproperty

SPContext.Current.Site.Url; 
+2

但也許如果代碼與SharePoint Web應用程序Dampe SPContext是一個更好的解決方案運行 SPContext.Current.Site.RootWeb.Url 會更適合 – Jason 2013-09-18 05:19:10

0

如果你想獲得一臺機器上的所有網絡應用程序,你可以得到這個集合:

Microsoft.SharePoint.Administration.SPWebService.ContentService.WebApplications 

良好的措施,這裏是你如何得到管理Web應用程序(S):

Microsoft.SharePoint.Administration.SPWebService.AdministrationService.WebApplications 

通過使用這些方法,你可以去,針對硬編碼的網站集的URL到您的代碼庫很長的路要走。

2

所以你面臨的問題是代碼必須適應不同的環境中的不同URL?

有處理這種

  1. 確保對網址在所有的環境中同樣通過使用IIS主機頭這將導致該網址是在兩個DEV機相同的兩種方法和PROD機器。 (在DEV機器上,您還需要在註冊表中設置BackConnectionHostNames以使其運行良好,因爲您將登錄到DEV框並從那裏在本地工作)。 [1] http://www.it-notebook.org/iis/article/understanding_host_headers.htm [2] http://support.microsoft.com/kb/896861

  2. 但更標準(和現實)解決,這將是保持根網站名稱在配置文件中,並讓代碼把它撿起來從那裏的道路。對於不同的環境,你只需要去更新配置文件。您還可以通過設置安裝程序來自動執行此操作,以根據安裝到的環境替換字符串。你得到的好處是你沒有對Url進行硬編碼,並且邏輯不依賴於服務器的主機名(肯定會有使用主機頭的情況,或者導致url的備用訪問映射與服務器的主機名不同)。所以這樣你可以更好地解耦。

只是我的兩分錢。

1

對我而言,這些提示沒有奏效。我有幾個網站集和,而不是使用DNS信息,我發現它更安全,讓網絡應用程序這樣的最頂層網站收集的網址:

[current SPWeb].Site.WebApplication.AlternateUrls[0].IncomingUrl 

或(長,從而導致URL尾隨斜線) :

[current SPWeb].Site.WebApplication.AlternateUrls[0].Uri.AbsoluteUri 
+0

請注意,甚至可能沒有該地址的網站。 – 2014-02-28 02:59:18

-1

這將帶你到任何網站或你所在的子網站的主頁。而不是根網站的主頁。

SPContext.Current.Web.Url; 
0

小心!

雖然WebApplication.Sites集合中的第一項通常是根網站集,但如果在創建其他網站集之後發生刪除並重新創建根網站集,則不保證其爲零[0] 。更可靠的方法是使用像這樣的根URL來引用網站集。

WebApplication.Sites["/"] 

此外,SharePoint計時器作業在Web應用程序的上下文中執行。因此,對於一個計時器作業:

using (SPSite site = this.WebApplication.Sites["/"]) 
{ 
}