我正在尝试调用RetrieveOrganizationInfoRequest。问题是我无法在最新的SDK(Install-Package Microsoft.CrmSdk.CoreAssemblies -Version 9.0.2.5
)中找到它-它存在于9.0.2.4
SDK中,并且仍然受CRM支持。
有一种解决此问题的已知方法(我的意思是降级SDK以外的其他方法)-明确执行请求。即:
using (var serviceProxy = new OrganizationServiceProxy(new Uri(org.OrganizationServiceUri),
null, credentials, null))
{
serviceProxy.Timeout = new TimeSpan(0, 10, 0);
var response = os.Execute(new OrganizationRequest("RetrieveOrganizationInfo"));
}
这行得通-从某种意义上说,CRM返回了响应,但是客户端无法使用以下方法反序列化它:
System.ServiceModel.Dispatcher.NetDispatcherFaultException
HResult = 0x80131501消息=格式化程序在 尝试反序列化消息:尝试执行以下操作时出错 反序列化参数 http://schemas.microsoft.com/xrm/2011/Contracts/Services:ExecuteResult。 InnerException消息为“第1行的位置1400错误。”元素 'http://schemas.datacontract.org/2004/07/System.Collections.Generic:value' 包含来自映射到名称的类型的数据 'http://schemas.microsoft.com/xrm/9.0/Contracts:OrganizationInfo'。的 解串器不知道任何映射到该名称的类型。 考虑更改您的ResolveName方法的实现 DataContractResolver返回名称的非空值 'OrganizationInfo'和名称空间 'http://schemas.microsoft.com/xrm/9.0/Contracts'。”。请参阅 InnerException,以获取更多详细信息。
我想我以某种方式缺少类型映射。我尝试将DataContractResolver
替换为自己的
var contract = serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Contract;
var operation = contract.Operations.Find("Execute");
var behavior = operation.Behaviors.Find<DataContractSerializerOperationBehavior>();
behavior.DataContractResolver = new CustomDataContractResolver();
但是CustomDataContractResolver
没有被调用。任何想法如何挂钩合同处理,以便可以覆盖此行为?
答案 0 :(得分:0)
一段时间以前,我已经使用较早的v9.0 Microsoft.CrmSdk.CoreAssemblies NuGet软件包测试了RetrieveOrganizationInfoRequest
消息。
当我看到您的问题时,我启动了该解决方案并运行了它。一切正常。
然后,我将所有NuGet软件包更新为最新版本(IdentityModel除外)。这将CoreAssemblies软件包带到了v9.0.2.5。 这是所有更新后的NuGet软件包:
这使该消息停止工作,因为在Microsoft.Crm.Sdk.Messages
名称空间中不再找到该消息。
尽管似乎没有(或根本没有)记录在案,但RetrieveCurrentOrganizationRequest消息可能已与RetrieveCurrentOrganizationResponse消息一起被取代。
我对此进行了测试,并且可以与v9.0.2.5核心程序集一起使用。
也...我通常直接使用请求类,而不是使用name参数实例化OrganizationRequest。您的构造函数示例:
new OrganizationRequest("RetrieveOrganizationInfo")
似乎不是有效的请求名称。当我使用您的语法时,会遇到与您相同的错误。
当我尝试为:
new OrganizationRequest("RetrieveOrganizationInfoRequest");
我遇到了另一个错误:
此外,我赞扬您在编写自己的解析器时的勇敢精神。幸运的是,从D365获得受支持的响应绝不会那么复杂。
答案 1 :(得分:0)
它被误删除并已在最新的Xrm Sdk中修复。
Install-Package Microsoft.CrmSdk.CoreAssemblies -Version 9.0.2.12
// using Microsoft.Crm.Sdk.Messages from assembly Microsoft.Crm.Sdk.Proxy
var response = (RetrieveOrganizationInfoResponse)os.Execute(new RetrieveOrganizationInfoRequest());