首页 文章

使用ExecuteTransactionRequest时出现FaultException(CRM 2015)

提问于
浏览
1

我正在对ExecuteTransactionRequest进行一些技术调查 . 这不是我以前用过的东西所以我敲了一个非常快速的实验只是为了看它是如何工作的 . 但是,在发送请求时,OrganizationService会抛出FaultException(下面) . 我认为正在发生的是我的CRM版本不支持OrganizationRequest . 虽然我很确定我有合适的组件和版本 .

任何人都可以对我错过的内容有所了解吗?

CRM Deployment Version: 7.0.1.129

Organization Version: 7.0.2.53

Microsoft.Xrm Assembly Version: 7.0.0.0(也发生在8.0.0.0)

Microsoft.Xrm.Sdk.dll中发生未处理的类型'System.ServiceModel.FaultException'的异常附加信息:格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数http://时出错schemas.microsoft.com/xrm/2011/Contracts/Services:request . InnerException消息是'第1行位置451中的错误 . 元素'http://schemas.microsoft.com/xrm/2011/Contracts/Services:request'包含来自映射到名称'http:// schemas的类型的数据.microsoft.com / XRM / 2011 / Contract :ExecuteTransactionRequest” . 反序列化器不知道映射到此名称的任何类型 . 考虑更改DataContractResolver上的ResolveName方法的实现,以返回名称'ExecuteTransactionRequest'和名称空间'http://schemas.microsoft.com/xrm/2011/Contracts'的非空值 . 有关更多详细信息,请参阅InnerException .

CrmConnection connection = CrmConnection.Parse(GetCrmConnectionString("unmanaged"));
IOrganizationService orgService = new OrganizationService(connection);

ExecuteTransactionRequest transactionRequest = new ExecuteTransactionRequest()
{
    ReturnResponses = true,
    Requests = new OrganizationRequestCollection()
};

Entity newContact = new Entity("contact");
newContact["firstname"] = "Stack";
newContact["lastname"] = "Overflow";

CreateRequest createRequest = new CreateRequest()
{
    Target = newContact
};

transactionRequest.Requests.Add(createRequest);

ExecuteTransactionResponse transactionResponse = (ExecuteTransactionResponse)orgService.Execute(transactionRequest);

1 回答

  • 1

    Update

    快速查看代码,看起来是因为 CreateRequest 没有被添加到集合中 . 在您发表评论并仔细检查crm组织版本之后,您将进入CRM 2015(而非更新1) . ExecuteTransactionRequest仅受CRM 2015更新1(版本7.1.XXX)和更高版本(版本8.0.XXX)支持 . 很遗憾,在至少2015年更新应用于组织之前,您的查询将无法运行 .


    您没有将创建请求添加到 ExecuteTransactionRequest - Requests 集合中 . 空请求集合最有可能导致异常 .

    ExecuteTransactionRequest transactionRequest = new ExecuteTransactionRequest()
    {
         ReturnResponses = true,
         Requests = new OrganizationRequestCollection()
    };
    
    Entity newContact = new Entity("contact");
    newContact["firstname"] = "Stack";
    newContact["lastname"] = "Overflow";
    
    CreateRequest createRequest = new CreateRequest()
    {
         Target = newContact
    };
    
    transactionRequest.Requests.Add(createRequest); //missing
    
    ExecuteTransactionResponse transactionResponse = (ExecuteTransactionResponse)orgService.Execute(transactionRequest);
    

相关问题