Работа с онлайн-плагином CRM 2011 - Как создать OrganizationServiceProxy? - PullRequest
1 голос
/ 28 августа 2011

Я пытаюсь создать плагин, который создает задачу в ответ на создать сообщение для пользовательского объекта.

Я использовал CrmSvcUtil.exe для создания пользовательского OrganisationServiceContextУ меня есть тестовый хост консольного приложения, который успешно использует это для создания задачи (хотя с помощью SDK serverConnect.GetServerConfiguration () для создания OrganizationServiceProxy).

Когда я развертываю сборку плагина (изолированную среду) в онлайнНапример, приведенный ниже код взрывается с:

System.Security.SecurityException: запрос разрешения типа 'System.Security.Permissions.SecurityPermission, mscorlib, Version = 4.0.0.0, Culture = нейтральный, 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);

Может ли кто-нибудь указать мне правильное направление?

Спасибо

1 Ответ

3 голосов
/ 29 августа 2011

Ваш 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}, который вы используете, я предполагаю, что ваш запрос заблокирован песочницей, поскольку он нарушает ограничения .

...