我们知道,在一个SharePoint的服务器场中,不同的机器有不同的角色,其中的一个角色就是web前端服务器(web front end),与之相对的还有应用程序服务器(application server)、数据库服务器(database server)等等。我在刚刚接触SharePoint的时候,总是疑惑前端服务器是什么,它与应用程序服务器的区别是什么,今天简单总结一下吧
这里是web front end的一个解释:点击打开链接 讲的很明确了,web 前端服务器其实就是一个web server,用来处理用户的http/https请求,然后返回数据。web front end是依靠IIS来做到这一点的,因此一个web front end上,必须要安装IIS。一个服务器场(farm)中,可以包含多个前端,同样每个前端都需要安装IIS,多个前端还可以使用负载均衡来分发用户的请求。可以处理web request就是前端的标志。而应用程序服务器,一般不会处理web request,而是处理一些其他的任务,例如timer job, index等等。
那么如何判断一个server是不是前端呢?安装了IIS的server,未必是一个前端,我见过一些application server上也安装了IIS,虽然也可以作为前端,但是从来不用。从SharePoint的管理中心来看,System settings->Manage servers in this farm,可以看到server上运行的各个服务:
可以看到其中一个服务是“Microsoft SharePoint Foundation Web Application”,这个服务就标志着这个server可以作为前端,就可以认为这个server是一个前端,如果没有这个服务,一定不是前端。需要注意的是这个服务的名字在SharePoint 2007中,叫做“Windows SharePoint Services Web application”。
因此我们还可以通过代码来判断,当前的服务器是不是一个前端:
using Microsoft.SharePoint.Administration;
private bool IsWebFrontEnd(SPServer server)
{
bool isWFE = false;
foreach (SPServiceInstance spsInstance in server.ServiceInstances)
{
if (spsInstance is SPWebServiceInstance //SPWebServiceInstance就是上面提到的service实例:Microsoft SharePoint Foundation Web Application
&& spsInstance.Status != SPObjectStatus.Disabled) //没有被禁用
&& spsInstance.Name != "WSS_Administration")//如果CA上也运行着这个服务,就需要排除CA自己的一个web service 实例。
{
isWFE = true;
break;
}
}
return isWFE;
}
需要说明的是,SharePoint 提供了一个对象“
SPServerRole”这个枚举对象的值分别为:Invalid,WebFrontEnd,Application,SingleServer。这里虽然有一个值是“WebFrontEnd”,但是这个值不能准确的判断当前server是否是一个前端,例如一个standalone的环境,server既是一个前端,可以接受web request,也是CA,可以管理SharePoint,这个时候这个server的role是Application。