Jen*_*nsB 7 c# dynamics-crm-2011
我希望能够设置我的来电显示
XrmServiceContext : Microsoft.Xrm.Client.CrmOrganizationServiceContext
Run Code Online (Sandbox Code Playgroud)
使用svcutil.exe为crm生成的上下文.
据我所知,我无法在现有连接上执行此操作,我需要首先创建一个OrganizationServiceProxy设置CallerID 的实例,然后将其作为参数传递给新的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);
Run Code Online (Sandbox Code Playgroud)
编辑2:事情并不那么简单.这样做不会改变我收到的数据.
CrmConnection connection = new CrmConnection("Xrm");
connection.CallerId = Guid.NewGuid();//u.Id;
_serviceContext = new XrmServiceContext(connection);
Run Code Online (Sandbox Code Playgroud)
它编译并且不会崩溃,但是当我使用具有非常低的权限但仍然获得所有数据的用户的id时我怀疑,然后我尝试为XrmServiceContext的每个实例生成新的Guid但是我仍然得到了所有的回报.所以我猜它没有被使用..或者我错过了别的东西.
编辑3
在设置WhoAmIRequest之后执行a CallerID仍将返回在连接字符串中设置的同一用户.
编辑4
似乎我的问题与缓存有关.在我的实现中,我需要首先调用服务上下文来找出我想要模仿的用户的Guid.此调用未CallerID设置.如果我跳过这个初始查询并从头开始设置一个特定的Guid,那么CallerID就可以了.我猜这是因为服务上下文缓存了我原来的CallerId或类似的东西.
现在我只需要弄清楚如何清除CRM 2013 SDK中的缓存.
编辑5 使用本指南完整地关闭缓存:http://msdn.microsoft.com/en-us/library/gg695805.aspx我已经让它工作了.然而,如果我能在我需要的那一点清除它而不是完全禁用它,我会更喜欢.
如果有人可以告诉我如何使用代码清空服务上下文缓存,我会将其标记为正确的解决方案
该问题与instanceMode该部分下的 web.config 中定义的默认值有关microsoft.xrm.client。
默认情况下,该设置设置为PerRequest
\n\n\n\n\n例如,PerRequest \xe2\x80\x93 在 Web\n 请求上下文中返回相同的第一个实例。每个 HttpContext 实例都有一个实例。
\n
因此,在这种情况下,当您执行初始调用以确定要将 CallerId 设置为哪个用户时,该实例将被“缓存”(由于缺乏更好的词)以及同一请求中的后续调用,即使您正在创建一个新的实例,也会返回该实例XrmServiceContext
解决方案是更改instanceMode为PerInstance
\n\n\nPerInstance \xe2\x80\x93 在每次调用时返回一个新实例。
\n
修改您的 web.config 以便instanceMode正确指定属性
<microsoft.xrm.client>\n <contexts>\n <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" serviceName="Xrm" />\n </contexts>\n <services>\n <add name="Xrm" type="Microsoft.Xrm.Client.Services.OrganizationService, Microsoft.Xrm.Client" instanceMode="PerInstance" />\n </services>\n </microsoft.xrm.client>\nRun Code Online (Sandbox Code Playgroud)\n\n在 JensB 在其第五次编辑中发布的文章中找到了此信息:http://msdn.microsoft.com/en-us/library/gg695805.aspx
\n