Этот OperationContextScope удаляется из строя - PullRequest
0 голосов
/ 18 июня 2020

Я вызываю службу WCF в ASP. NET Core, и все работает нормально, но всякий раз, когда выполняется конец using, я получаю сообщение об ошибке:

Этот OperationContextScope утилизируется не по порядку

Я считаю, что использую неправильный шаблон для вызова службы WCF с помощью async / await, но я не уверен, что я делаю неправильно.

Ниже приведен код Я использую для вызова службы.

[HttpPost]
public async Task<IActionResult> Runcase(IFormCollection formCollection)
{
    if (ModelState.IsValid)
    {
        var runnumber = formCollection["Run number"];
        await CallServiceasync();
        return RedirectToAction("", "");
    }
    else
    {
        return View(formCollection);
    }
}
public async Task CallServiceasync()
{
    var product = p1.Value;
    var a = product.first;
    foreach (int Age in a.age)
    {
        foreach (int Gender in a.sex)
        {
            foreach (int Healthclass in a.uclass)
            {
                RequestData requestData = new RequestData()
                {
                    ProductID = 534,
                    STATE = "CO",
                    AGE1 = Age,
                    SEX1 = Gender,
                    UND_CLASS1 = Healthclass,

                };
                RecieveResponseasync(requestData);
               }
        }
    }
}
public async Task RecieveResponseasync(InputValues inputValues)
{
    string reqedata = "";
    string apikey = "001010iZno7001010L";
    QuoteEngineService.MarketingSoftwareClient Service = new QuoteEngineService.MarketingSoftwareClient();
    await Service.OpenAsync();
    try
    {
        using (OperationContextScope scope = new OperationContextScope(Service.InnerChannel))
        {
            HttpRequestMessageProperty httpRequestMessage = new HttpRequestMessageProperty();
            httpRequestMessage.Headers.Add("apikey", apikey);
            OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestMessage;
            reqedata = inputValues.XmlSerializetoString();
            var result = await Service.ProcessRequestAsync(reqedata, "4fa2-ae27");
            var outputvalues = new OutputvaluesViewModel();
            outputvalues = result.DeserializeToObject();
            List<OutputValue> outputs = new List<OutputValue>();
            if (outputvalues.InitialPremium != null)
                outputs.Add(new OutputValue {  Name = "InitialPremium", Result = outputvalues.InitialPremium});
            if (outputvalues.TargetPremium != null)
                outputs.Add(new OutputValue {  Name = "TargetPremium", Result = outputvalues.TargetPremium });
            foreach (var output in outputs)
            {
                await _context.outputValues.AddAsync(output);
                await _context.SaveChangesAsync();
            }
            await Task.Delay(500);
        }
    }// **At this point I am getting error**
    catch (Exception ex)
    {
        throw;
    }
    finally
    {
        if (Service.State == System.ServiceModel.CommunicationState.Opened)
        {
            await Service.CloseAsync();
        }
    }
}

Error

1 Ответ

0 голосов
/ 19 июня 2020

Из документов :

Предупреждение

Не используйте асинхронный шаблон «ожидание» в блоке OperationContextScope. Когда происходит продолжение, оно может выполняться в другом потоке, а OperationContextScope - это поток, указанный в c. Если вам нужно вызвать await для вызова asyn c, используйте его вне блока OperationContextScope.

...