有没有办法让共享点应用程序托管的当前服务器的根网址?例如,如果我想加载从网站的信息目前我打字:如何在Share Point 2010项目中找到根站点URL?
SPSite site = new SPSite(http://dev3);
但是,当我开发的代码移动到生产服务器我有一个新的服务器的URL手动更换网站的网址:
SPSite site = new SPSite(http://sp2010);
我使用C#在Visual Studio 2010
有没有办法让共享点应用程序托管的当前服务器的根网址?例如,如果我想加载从网站的信息目前我打字:如何在Share Point 2010项目中找到根站点URL?
SPSite site = new SPSite(http://dev3);
但是,当我开发的代码移动到生产服务器我有一个新的服务器的URL手动更换网站的网址:
SPSite site = new SPSite(http://sp2010);
我使用C#在Visual Studio 2010
如果你想获得当前机器的主机名,那就是:
System.Net.Dns.GetHostName()
如果您使用SharePoint对象模型寻找的东西,试试这个:
new SPSite(SPServer.Local.Address.ToString())
如果你想获得一台机器上的所有网络应用程序,你可以得到这个集合:
Microsoft.SharePoint.Administration.SPWebService.ContentService.WebApplications
良好的措施,这里是你如何得到管理Web应用程序(S):
Microsoft.SharePoint.Administration.SPWebService.AdministrationService.WebApplications
通过使用这些方法,你可以去,针对硬编码的网站集的URL到您的代码库很长的路要走。
所以你面临的问题是代码必须适应不同的环境中的不同URL?
有处理这种
确保对网址在所有的环境中同样通过使用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
但更标准(和现实)解决,这将是保持根网站名称在配置文件中,并让代码把它捡起来从那里的道路。对于不同的环境,你只需要去更新配置文件。您还可以通过设置安装程序来自动执行此操作,以根据安装到的环境替换字符串。你得到的好处是你没有对Url进行硬编码,并且逻辑不依赖于服务器的主机名(肯定会有使用主机头的情况,或者导致url的备用访问映射与服务器的主机名不同)。所以这样你可以更好地解耦。
只是我的两分钱。
对我而言,这些提示没有奏效。我有几个网站集和,而不是使用DNS信息,我发现它更安全,让网络应用程序这样的最顶层网站收集的网址:
[current SPWeb].Site.WebApplication.AlternateUrls[0].IncomingUrl
或(长,从而导致URL尾随斜线) :
[current SPWeb].Site.WebApplication.AlternateUrls[0].Uri.AbsoluteUri
请注意,甚至可能没有该地址的网站。 – 2014-02-28 02:59:18
这将带你到任何网站或你所在的子网站的主页。而不是根网站的主页。
SPContext.Current.Web.Url;
小心!
虽然WebApplication.Sites集合中的第一项通常是根网站集,但如果在创建其他网站集之后发生删除并重新创建根网站集,则不保证其为零[0] 。更可靠的方法是使用像这样的根URL来引用网站集。
WebApplication.Sites["/"]
此外,SharePoint计时器作业在Web应用程序的上下文中执行。因此,对于一个计时器作业:
using (SPSite site = this.WebApplication.Sites["/"])
{
}
。 – 2011-05-10 12:27:20