微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 从外部MVC应用程序中的CrmOrganizationServiceContext获取OrganizationServiceProxy

我希望能够在我的上设置来电显示
XrmServiceContext : Microsoft.Xrm.Client.CrmOrganizationServiceContext

使用svcutil.exe为crm生成的上下文.

据我所知,我无法在现有连接上执行此操作,我需要首先创建一个OrganizationServiceProxy实例,设置Call​​erID,然后将其作为参数传递给新的XrmServiceContext,然后我可以使用它.

但是,我有点不知道如何从CrmOrganizationServiceContext到拥有OrganizationServiceProxy

该程序是一个单独的.Net4.5应用程序

任何有用的提示链接

编辑:发布此内容后发现此页面http://msdn.microsoft.com/en-us/library/gg695810.aspx

所以它可能很简单:

var connection = new CrmConnection("Xrm");
    connection.CallerId = uide;
    _serviceContext = new XrmServiceContext(connection);

编辑2:并不是那么简单.
这样做不会改变我收到的数据.

CrmConnection connection = new CrmConnection("Xrm");
    connection.CallerId = Guid.NewGuid();//u.Id;

    _serviceContext = new XrmServiceContext(connection);

它编译并且不会崩溃但我怀疑当我使用具有非常低的权限的用户的id但仍然获得所有数据时,我然后尝试为XrmServiceContext的每个实例生成新的Guid但是我仍然得到了所有的东西.所以我猜它没有被使用..或者我错过了别的东西.

编辑3
设置Call​​erID后执行WhoAmIRequest仍会返回在连接字符串中设置的同一用户.

编辑4
似乎我的问题与缓存有关.
在我的实现中,我需要首先调用服务上下文来找出我想要模仿的用户的Guid.此调用是在没有设置Call​​erID的情况下进行的.如果我跳过这个初始查询并从头开始设置一个特定的Guid,则CallerID可以工作.我猜这是因为服务上下文缓存了我原来的CallerId或类似的东西.

现在我只需要弄清楚如何清除CRM 2013 SDK中的缓存.

编辑5
通过使用本指南完整地关闭缓存:http://msdn.microsoft.com/en-us/library/gg695805.aspx我已经让它工作了.然而,如果我能在我需要的那一点清除它而不是完全禁用它,我会更喜欢.

如果有人可以告诉我如何使用代码清空服务上下文缓存,我会将其标记为正确的解决方

解决方法

该问题与microsoft.xrm.client部分下的web.config中定义的认instanceMode有关.

认情况下,该设置设置为PerRequest

PerRequest – returns the same first instance in the context of a Web
request,for example. one instance for each HttpContext instance.

因此,在这种情况下,当您执行初始调用以确定要将CallerId设置为哪个用户时,实例将被“缓存”(缺少更好的单词)和同一请求中的子请求调用,即使您正在创建新的XrmServiceContext,也会返回实例

解决方案是将instanceMode更改为PerInstance

PerInstance – returns a new instance on each call.

修改web.config,以便正确指定instanceMode属性

<microsoft.xrm.client>
    <contexts>
      <add name="Xrm" type="Xrm.XrmServiceContext,Xrm" serviceName="Xrm" />
    </contexts>
    <services>
      <add name="Xrm" type="Microsoft.Xrm.Client.Services.OrganizationService,Microsoft.Xrm.Client" instanceMode="PerInstance" />
    </services>
  </microsoft.xrm.client>

在JensB在其第5次编辑:http://msdn.microsoft.com/en-us/library/gg695805.aspx中发布的文章中找到此信息

原文地址:https://www.jb51.cc/csharp/99962.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐