在CRM2011插件中创建OrganizationServiceProxy以使用早期绑定

时间:2011-06-27 09:14:47

标签: c# plugins dynamics-crm-2011 early-binding

我们正在尝试在CRM2011插件中使用早期绑定类型。要启用此功能,我们需要添加ProxyTypesBeavior()或致电EnableProxyTypes()。但是,这两个属性都适用于OrganizationServiceProxy类,而IOrganizationService接口上不存在。

因此,如果我们使用以下代码来获取组织服务,我们如何获取代理类来设置上述属性?

var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = serviceFactory.CreateOrganizationService(context.UserId);

3 个答案:

答案 0 :(得分:3)

对于那些使用CRM Online的人来说,反射解决方案将不起作用,因为你陷入了沙箱模式。

以下使用IProxyTypesAssemblyProvider接口的解决方案(由Pavel Korsukov建议)为我工作(source)。

var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

var proxyTypesProvider = factory as IProxyTypesAssemblyProvider;
if (proxyTypesProvider != null)
{
    proxyTypesProvider.ProxyTypesAssembly = typeof(Xrm.XrmServiceContext).Assembly;
}
// Use the factory to generate the Organization Service.
var service = factory.CreateOrganizationService(context.UserId);

答案 1 :(得分:2)

此线程上的Guil提供了一个选项,可以使用反射将代码gen代理类型绑定到服务工厂。它对我有用。无法在沙盒中注册它,因为反射需要完全信任。

 factory.GetType().GetProperty("ProxyTypesAssembly").SetValue(factory, typeof(YourCrmContext).Assembly, null);

http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/bc7e93d4-1b36-4e21-9449-f51b67a2e52c/

答案 2 :(得分:-2)

像这样写,

IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);