5

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

那么,如果我们使用下面的代码来获取组织服务,那么我们如何获取一个代理类来设置上述属性呢?

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

3 回答 3

3

对于那些使用 CRM Online 的人来说,反射解决方案将无法工作,因为您被困在沙盒模式中。

以下使用 IProxyTypesAssemblyProvider 接口的解决方案(由 Pavel Korsukov 建议)对我有用(来源)。

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);
于 2014-02-25T19:17:11.243 回答
2

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

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

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

于 2012-10-11T21:36:31.433 回答
-2

这样写,

IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
于 2012-03-23T07:16:11.877 回答