CRM2011 - 某些用户表现不佳

时间:2015-12-09 16:21:48

标签: c# dynamics-crm-2011

我在使用CRM2011时遇到了麻烦:

当代码尝试使用IOrganizationService通过linq查询从数据库检索数据时,在Active Directory中创建的所有新用户都表现不佳。新用户拥有与旧用户相同的权利。

以下是一些可以更好理解的代码。 Activity是一个ActivityPointer,我尝试将所有附件链接到它:(缓慢的部分是当我尝试使用ActivityAttachments属性中的一个项目时)

foreach (var attachment in activity.ActivityAttachments)
                        {
                             //Do stuff
                        }

ActivityAttachments是使用datacontext

的linq查询的结果
        public IEnumerable<ActivityMimeAttachment> ActivityAttachments
    {
        get { return Datacontext.ActivityMimeAttachmentSet.Where(a => a.ObjectId != null && a.ObjectId.Id == Id).Select(a => new ActivityMimeAttachment(a)); }
    }

和datacontext是我的datamodel - 为每个用户创建和存储,作为我的crmservice,我的organizationservice实例

private static readonly ConcurrentDictionary<string, LeDataModel> _dataModels = new ConcurrentDictionary<string, LeDataModel>();
        protected LeDataModel Datacontext
        {
            get
            {
                LeDataModel _model;

                if (HttpContext.Current != null)
                {
                    var currentUser = HttpContext.Current.User.Identity.Name;

                    if (!_dataModels.TryGetValue(currentUser, out _model))
                    {
                        _model = new LeDataModel(CrmService) { MergeOption = MergeOption.NoTracking };
                        _dataModels.TryAdd(currentUser, _model);
                    }
                }
                else
                {
                    _model = AdminDataContext;
                }

                return _model;
            }
        }

protected OrganizationService CrmService
        {
        get
        {
            OrganizationService _service;

            if (HttpContext.Current != null)
            {
                var currentUser = HttpContext.Current.User.Identity.Name;

                if (!_services.TryGetValue(currentUser, out _service))
                {
                    _service = new OrganizationService("Crm");
                    _services.TryAdd(currentUser, _service);
                }
            }
            else
            {
                _service = AdminCrmService;
            }

            return _service;
        }
    }

我认为,问题不在于代码,因为它适用于某些用户,对新用户来说速度很慢。 我比较了CRM和AD中的新旧用户,一切看起来都是平等的。 有人知道CRM如何完成身份验证吗? 你有其他想法吗?

1 个答案:

答案 0 :(得分:0)

根据您对新用户如何遭受与旧用户相同的例外的评论,除了更多用户之外,我认为这是导致新用户出现性能问题的原因。

查找异常原因并修复它们,您的性能应该提高。

阅读此http://blogs.msdn.com/b/ricom/archive/2006/09/25/771142.aspx

和这个

How expensive are exceptions in C#?