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["/"]) 
{ 
}