使用 ExecuteTransactionRequest 时的 FaultException (CRM 2015)

FaultException when using ExecuteTransactionRequest (CRM 2015)

我正在对 ExecuteTransactionRequest 进行一些技术调查。这不是我以前用过的东西,所以我做了一个非常快速的实验,看看它是如何工作的。但是,在发送请求时,OrganizationService 会抛回 FaultException(如下所示)。我认为正在发生的事情是我的 CRM 版本不支持该 OrganizationRequest。虽然我很确定我有正确的程序集和版本。

任何人都可以阐明我所缺少的东西吗?

CRM 部署版本: 7.0.1.129

组织版本: 7.0.2.53

Microsoft.Xrm 程序集版本: 7.0.0.0(也发生在 8.0.0.0 上)

An unhandled exception of type 'System.ServiceModel.FaultException' occurred in Microsoft.Xrm.Sdk.dll

Additional information: The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://schemas.microsoft.com/xrm/2011/Contracts/Services:request. The InnerException message was 'Error in line 1 position 451. Element 'http://schemas.microsoft.com/xrm/2011/Contracts/Services:request' contains data from a type that maps to the name 'http://schemas.microsoft.com/xrm/2011/Contracts:ExecuteTransactionRequest'. The deserializer has no knowledge of any type that maps to this name. Consider changing the implementation of the ResolveName method on your DataContractResolver to return a non-null value for name 'ExecuteTransactionRequest' and namespace 'http://schemas.microsoft.com/xrm/2011/Contracts'.'. Please see InnerException for more details.

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);

更新

快速查看您的代码,看起来是因为 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);