【问题标题】:CRM 2011 Online Plugin Operation - How to create OrganizationServiceProxy?CRM 2011 Online Plugin Operation - 如何创建OrganizationServiceProxy?
【发布时间】:2011-11-05 09:26:34
【问题描述】:

我正在尝试创建一个插件,该插件会创建一个任务以响应自定义实体的创建消息

我已使用 CrmSvcUtil.exe 生成自定义 OrganisationServiceContext,我有一个控制台应用程序测试主机,它成功地使用它来创建任务(尽管使用 SDK serverConnect.GetServerConfiguration() 来创建 OrganizationServiceProxy)。

当我将插件程序集(沙盒)部署到在线实例时,下面的代码会爆炸:

System.Security.SecurityException:请求类型的权限 'System.Security.Permissions.SecurityPermission, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089' 失败

// Obtain the execution context from the service provider.
var executionContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(executionContext.UserId);

//Extract the tracing service for use in debugging sandboxed plug-ins.
ITracingService tracingService =
                (ITracingService)serviceProvider.GetService(typeof(ITracingService));

tracingService.Trace("Buiding");

var organizationUri = new Uri("{theuri}/XRMServices/2011/Organization.svc");          
var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = NetworkCredential)CredentialCache.DefaultCredentials;

var organizationServiceProxy = new OrganizationServiceProxy(organizationUri, null, credentials, null);
organizationServiceProxy.EnableProxyTypes();

var context = new CustomContext(organizationServiceProxy);

有人可以指出正确的方向吗?

谢谢

【问题讨论】:

    标签: plugins dynamics-crm-2011 dynamics-crm-online


    【解决方案1】:

    您的CustomContext 应该接受Microsoft.Xrm.Sdk.IOrganizationService 类型的参数。像这样(crmsvcutil 生成文件的摘录)

    /// <summary>
    /// Constructor.
    /// </summary>
    public CrmContext(Microsoft.Xrm.Sdk.IOrganizationService service) : base(service)
    {
    }
    

    您可以(并且应该)在插件上下文的帮助下简单地生成连接

    var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    var service = serviceFactory.CreateOrganizationService(context.UserId);
    
    using (var crmContext = new CrmContext(service))
    {
     ...
    }
    

    根据您使用的{theuri} 的值,我假设您的请求被沙箱阻止,因为它违反了它的constraints

    【讨论】:

    • 谢谢,这看起来不错 - 我今晚会尝试进行更改,然后将其标记为答案。关于 Uri,它的格式为 https://{customer}.crm5.dynamics.com,这绝对是 DNS 可解析的,并且请求本身是匿名的......
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多