下图展示了SharePoint 2010的Service Application框架里主要的类之间的关系。实箭头从parent类型指向child类型, 这里的child类型被保存在parent类型的一个集合型属性中。点箭头意思是SPServiceInstance类型代表着一个运行着的进程,该进程属于场范围内的由SPService类代表的服务。

Service Object Model_端系统

 

SPFarm代表着一个服务器场。它是配置等级结构的顶级。

SPServer代表着一个物理机器。SPServer的ServiceInstances属性保存有该机器上运行着的所有的Windws Services和Web Services.

 

Service Objects, 也被认为是后端系统对象(back-end system objects),它们包括:

  • SPService:代表着一个在服务器场内安装的或可用的服务。每个SPService对象都有一个Instances属性。任何一台服务器上能运行任意一种服务的仅一个Instance,但某些service可以有多个instances,每个运行在一台单独的机器上。每个instance都由SPServiceInstance代表。
  • SPServiceInstance:代表着场内某个运行在某一台机器上的服务。该对象的Provision方法可以用来启动这个service instance。
  • SPServiceApplication:Service Instance寄存着Service Application。 没有Service Instance, Service Application也用不了。Service Application包含有应用程序自己的数据和配置,并且对管理员提供配置服务的接口。service application之间是完全独立的。
  • SPIisWebServiceApplication:该类型实现了ISharedServiceApplication接口,并且使得一个Service Application可以通过topology service给publish出去。

 

Client Objects。client application与back-end服务进行通讯。client是发起通讯的应用程序。 Service是等待client来与之通讯并相应该通讯请求的应用程序。 client service objects包括下面两种:

  • SPServiceProxy: 代表着服务器场内安装的一个service client。SPServiceProxy对象是SPServiceApplicationProxy对象的parent,就跟在服务器端,SPService对象是SPServiceApplication对象的parent一样。这里的parent对象也可以被认为是child对象的类工厂(class factory)。
  • SPServiceApplicationProxy:代表着一个向一个service application的连接(connection)。提供了一个对service application访问的接口。SPServiceApplicationProxy支持连接remote farm, 使得客户端代码使用remote farm的service application成为可能。SPServiceApplicationProxy是在创建Service application时自动创建出来的。 至少, service proxy会把请求forward到remote service application上。

 

上面的文章出自MSDN,看了是不是也感觉似懂非懂?

实践出真知,让我们用PowerShell来对这些概念进行一些挖掘,以加深理解。

 

SPServiceApplication

Service Object Model_端系统_02

 

SPServiceInstance

Service Object Model_应用程序_03

 

SPService

Service Object Model_microsoft_04

 

SPService与SPServiceInstance

Service Object Model_端系统_05

 

SPService与SPServiceApplication

Service Object Model_服务器_06

 

SPServiceApplicationProxy

Service Object Model_应用程序_07

 

SPServiceProxy

Service Object Model_客户端_08

 

SPServiceProxy与SPServiceApplicationProxy

Service Object Model_端系统_09

反向寻找

Service Object Model_端系统_10

 

SPFarm与SPServiceProxy

Service Object Model_客户端_11

 

SPServiceApplication与SPServiceApplicationProxy

Service Object Model_microsoft_12

因为一个web application只能对应一个proxy group,一个proxy group里一种service application 的proxy只有一个。

通过proxy group就找到了对应的application proxy。

Service Object Model_端系统_13

 

通过以上的命令, 我们已经将所有的这些对象都串联起来了。

是不是明白的更多一些了?