Невозможно десериализовать зависимую транзакцию, переданную во внешний API - PullRequest
0 голосов
/ 11 апреля 2020

Я пытался реализовать пример для DependentTransaction в https://docs.microsoft.com/en-us/dotnet/api/system.transactions.dependenttransaction?view=netframework-4.8

Разница для меня заключается в том, что я передаю зависимую транзакцию в API и не могу восстановить Полученный объект возвращается в DependentTransaction.

Итак, вот код:

using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    // code that saves an entity in the database within the above scope
    // code that creates an audit trail object
    object dependantTxn = Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete);
    AuditTrailParamterModel model = new AuditTrailParamterModel()
    {
       AuditTrail = auditTrail,
       transaction = dependantTxn
    }
    await client.PostAsJsonAsync("http//localhost/auditrail/api/InsertAuditTrail", model);
}

На приемном конце здесь есть часть кода (как в примере):

[Route("api/InsertAuditTrail")]<br/>
[HttpPost]<br/>
public async Task<IHttpActionResult> InsertAuditTrail(AuditTrailParamterModel model)
{
    // Create a DependentTransaction from the object passed to API
    DependentTransaction dTx = (DependentTransaction)model.transation;

    // more code ....
}

Проблема в том, что model.transation заполняется следующим текстом:

{{"OletxTransactionPropagationToken":"AQAAAAMAAADYbd5tQr4RbyxnSSp5UW2AAAQAAAAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADk4NGNmZDU1LTQyMmUtNDI4MC04NDk3LTg2NjM3ODE4NjZjNQAAMAAHAAAAZM1kzSAAAABRTi0wMDMwABAAAABRAE4ALQAwADAAMwAwAAAAAAAAAAAAAAAOAAAAdGlwOi8vUU4tMDAzMC8AAA=="}}

Строка:

DependentTransaction dTx = (DependentTransaction)model.transation; 

падает.

Исключение составляет

Невозможно привести объект типа 'Newtonsoft. Json .Linq.JObject' к типу 'System.Transactions.DependentTransaction'.

Тип DependentTransaction наследуется от Транзакция и члены следующие:

public static Transaction Current { get; set; }
public IsolationLevel IsolationLevel { get; }
public TransactionInformation TransactionInformation { get; }
public Guid PromoterType { get; }

, а TransactionInformation имеет следующие члены:

public string LocalIdentifier { get; }
public Guid DistributedIdentifier { get; }
public DateTime CreationTime { get; }
public TransactionStatus Status { get; }

Я также попытался проверить, могу ли я использовать декодер из формата Base64, чтобы проверить, эта длинная строка может быть ча в транзакции, но это не может быть сделано.

Я часами искал онлайн, чтобы найти решение, и не могу ничего найти.

Может кто-нибудь помочь? Я был бы очень признателен.

...