MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第一部分)——IDiscoveryService
2011-11-23 04:38
489 查看
Microsoft CRM 2011中,包括有两个web service,分别提供了一组方法,通过调用不同的web服务,可以完成不同的功能。
这两个web服务分别是IDiscoveryService web服务以及IOrganization web服务。
IDiscoveryService web服务:一个单独的MS CRM安装中,可以在某台服务器上面部署有多个组织。在存储层角度看,就是一个MS CRM安装,对应一个MSCRM_Config数据库,而每个组织对应一个<组织名称>_MSCRM数据库。如下图所示。
![](http://images.cnblogs.com/cnblogs_com/StoneGarden/201111/201111230438279787.png)
可以看到,有一个MSCRM_Config数据库,而其他的组织相关的数据库包括有Demo_MSCRM等等多个以”_MSCRM”结尾的数据库。
在MSCRM_CONFIG数据库中,存储了不同组织以及该组织对应的数据库。换言之,为了访问业务数据,需要创建sqlConnection实例,那么SqlConnection实例的连接字符串如何确定呢。因为我们知道组织的唯一名称,那么,就可以查询MSCRM_CONFIG数据库,然后,找到相应的连接字符串,赋值给SqlConnection的ConnectionString属性。而后,就可以使用该SqlConnection实例,访问相关组织的数据了。当然,如此直接的访问后台数据表的方式,在MS CRM开发中是不允许的,所以,MS CRM提供了IDiscoveryService服务,使得开发人员可以根据组织的唯一名称以获取该组织的OrganizationService Web服务的Url地址。
IDiscoveryService接口公布的方法是Execute方法,该方法接收的参数为DiscoveryRequest的子类实例。返回的是DiscoveryResponse的子类实例。类树如下图所示。
![](http://images.cnblogs.com/cnblogs_com/StoneGarden/201111/201111230438278084.png)
从上图可见,可以向DiscoveryService提交的请求包括有:
a) RetrieveOrganizationsRequest请求,获取当前MS CRM安装中所有的组织信息。该请求接受的参数为
与RetrieveOrganizationsRequest请求对应的响应是RetrieveOrganizationsResponse,该请求中,就一个属性Details,该属性的类型为OrganizationDetailCollection,是一个包含了当前MS CRM部署中,所有组织的详细信息数组,每个组织的详细信息存放在OrganizationDetail的实例中。OrganizationDetail的属性包括有
b) RetrieveOrganizationRequest请求,用于获取给定唯一名称组织的信息,该请求的接受的参数为:
返回值是RetrieveOrganizationResponse对象,该对象中包含的属性是类型为OrganizationDetail的Detail属性。关于OrganizationDetail类的信息前面已经介绍了,在此不赘述。
c) RetrieveUserIdByExternalIdRequest请求,用于CRM Live模式下,通过该请求,可以获取与给定Windows Live ID相关的CRM Online用户的ID。
调用IDiscoveryServic的Execute方法的样例代码如下:
这两个web服务分别是IDiscoveryService web服务以及IOrganization web服务。
IDiscoveryService web服务:一个单独的MS CRM安装中,可以在某台服务器上面部署有多个组织。在存储层角度看,就是一个MS CRM安装,对应一个MSCRM_Config数据库,而每个组织对应一个<组织名称>_MSCRM数据库。如下图所示。
![](http://images.cnblogs.com/cnblogs_com/StoneGarden/201111/201111230438279787.png)
可以看到,有一个MSCRM_Config数据库,而其他的组织相关的数据库包括有Demo_MSCRM等等多个以”_MSCRM”结尾的数据库。
在MSCRM_CONFIG数据库中,存储了不同组织以及该组织对应的数据库。换言之,为了访问业务数据,需要创建sqlConnection实例,那么SqlConnection实例的连接字符串如何确定呢。因为我们知道组织的唯一名称,那么,就可以查询MSCRM_CONFIG数据库,然后,找到相应的连接字符串,赋值给SqlConnection的ConnectionString属性。而后,就可以使用该SqlConnection实例,访问相关组织的数据了。当然,如此直接的访问后台数据表的方式,在MS CRM开发中是不允许的,所以,MS CRM提供了IDiscoveryService服务,使得开发人员可以根据组织的唯一名称以获取该组织的OrganizationService Web服务的Url地址。
IDiscoveryService接口公布的方法是Execute方法,该方法接收的参数为DiscoveryRequest的子类实例。返回的是DiscoveryResponse的子类实例。类树如下图所示。
![](http://images.cnblogs.com/cnblogs_com/StoneGarden/201111/201111230438278084.png)
从上图可见,可以向DiscoveryService提交的请求包括有:
a) RetrieveOrganizationsRequest请求,获取当前MS CRM安装中所有的组织信息。该请求接受的参数为
属性名称 | 类型 | 描述 |
AccessType | EndpointAccessType | 用于设定需要获取的服务终端点的类型,可选值包括有Default、Internal以及Intranet |
Release | OrganizationRelease | 用于设定获取的终端点的版本,可选值包括有Current或者V5 |
属性名称 | 类型 | 描述 |
OrganizationId | Guid | 组织的唯一ID |
FriendlyName | String | 组织的友好名称 |
OrganizationVersion | String | 组织的版本号 |
UrlName | String | OrganizationService服务中,使用的组织名称 |
UniqueName | String | 组织的唯一名称 |
Endpoints | EndpointCollection | 组织的各个终端点的集合,每个终端点包括有服务的类型以及地址 |
State | OrganizationState | 组织的状态,包括有Enabled(已启用)/Disabled(已禁用)两种状态 |
属性名称 | 类型 | 描述 |
AccessType | EndpointAccessType | 用于设定需要获取的服务终端点的类型,可选值包括有Default、Internal以及Intranet |
Release | OrganizationRelease | 用于设定获取的终端点的版本,可选值包括有Current或者V5 |
UniqueName | String | 用于设定组织的唯一名称 |
c) RetrieveUserIdByExternalIdRequest请求,用于CRM Live模式下,通过该请求,可以获取与给定Windows Live ID相关的CRM Online用户的ID。
调用IDiscoveryServic的Execute方法的样例代码如下:
//实例化RetrieveOrganizationsRequest请求 RetrieveOrganizationsRequest orgsRequest = new RetrieveOrganizationsRequest() { AccessType = EndpointAccessType.Default, Release = OrganizationRelease.Current }; //调用IDiscoveryService的Execute方法,传入RetrieveOrganizationsRequest类型参数,返回RetrieveOrganizationsResponse类型的响应 RetrieveOrganizationsResponse organizations = (RetrieveOrganizationsResponse)service.Execute(orgsRequest); //枚举当前CRM部署中的所有组织的信息 foreach (OrganizationDetail organization in organizations.Details) { Console.WriteLine("Organization Name: {0}", organization.FriendlyName); Console.WriteLine("Unique Name: {0}", organization.UniqueName); Console.WriteLine("Endpoints:"); foreach (var endpoint in organization.Endpoints) { Console.WriteLine(" Name: {0}", endpoint.Key); Console.WriteLine(" URL: {0}", endpoint.Value); } } //实例化RetrieveOrganizationRequest请求,获取当前部署中,最后一个组织的唯一名称 RetrieveOrganizationRequest orgRequest = new RetrieveOrganizationRequest() { UniqueName = organizations.Details[organizations.Details.Count - 1].UniqueName, AccessType = EndpointAccessType.Default, Release = OrganizationRelease.Current }; //调用IDiscoveryService的Execute方法,获取给定唯一名称组织的信息 RetrieveOrganizationResponse org = (RetrieveOrganizationResponse)service.Execute(orgRequest);
相关文章推荐
- MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(三)
- MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(四)
- MS CRM 2011的自定义和开发—CRM web服务介绍——IDiscoveryService
- MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)
- MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(一)
- MS CRM 2011的自定义和开发(8)——扩展框架以及扩展点介绍
- MS CRM 2011的自定义和开发(7)——视图编辑器(第一部分)
- MS CRM 2011的自定义与开发(6)——表单编辑器(第一部分)
- MS CRM 2011的自定义和开发(9)——编程模型介绍
- 学习笔记:使用Web Service Software Factory开发简易留言本服务以及Mobile调用实现-1.创建Service
- http://www.webservicex.net/globalweather.asmx 天气服务返回值介绍
- MS CRM 2011的自定义与开发(5)——关系编辑器
- MS CRM 2011的自定义和开发
- CRM 2011开发工具 developertoolkit 介绍
- MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(3)
- MS CRM 2011的自定义和开发——表单编辑器
- MS CRM 2011的自定义与开发(1)——总述
- MS CRM 2011的自定义与开发—表单脚本扩展开发
- Web开发之自定义前端组件经验介绍
- 使用Apache cxf 开发restful webservice 服务的实例