Обработчик обратного вызова службы WCF, вызывающий другие проблемы обратного вызова службы - PullRequest
0 голосов
/ 28 сентября 2018

Я новичок в WCF, я создал решение, в котором есть клиентское приложение WPF, связанное со службой WCF, назовем его TradingService (самостоятельно размещенный) с дуплексным связыванием (WsDualHttpBinding), а TradingService связано с другим WCF.service: MVGenerator (также duplex).

Идея здесь: клиентское приложение (WPF) вызывает метод TradingService getValues ​​().getValues ​​() обрабатывает Data, перед возвратом он вызывает метод subscribe () в MVGenerator.После вызова метода Subscribe () MVGenerator генерирует случайные значения каждые 5 секунд и отправляет их в TradingService через функцию обратного вызова.А обработчик обратного вызова в TradingService вызывает другой обратный вызов, который обрабатывается в клиентском приложении.

enter image description here

Subscribe () выглядит следующим образом

Subscription = true;
        Random MValueRand = new Random();

        while (Subscription)
        {
                Thread.Sleep(5000);
                foreach (var securityDTO in securityDTOs)
                {
                    securityDTO.MarketPrice = MValueRand.Next(1, 10);
                }
                OperationContext.Current.GetCallbackChannel<IGeneratorServiceCallBcack>()
                            .ValueUpadatedCallback(securityDTOs); // exception thrown
        }

Подписка - это глобальное свойство в MVGeneratorService:

private bool Subscription { get; set; } = false;

При обратном вызове, который предоставляет MVGeneratorService, и TradingService реализует: ValueUpadatedCallback () Вот в чем проблема.

    public void GetValuesCallback(SecurityDTO[] securityDTOs)
    {
        foreach (var row in securityDTOs)
        {
            Debug.WriteLine("market value = {0} equals : ",row.MarketPrice);
        }
        OperationContext.Current.GetCallbackChannel<ITradingCallback>()
                            .MarketValueUpdate(securityDTOs); // exception thrown here
    }

Я получаю следующую ошибку:

System.InvalidCastException: «Невозможно привести прозрачный прокси к типу« DataService.ITradingCallback ». '

Иногда вместо этого выдается другое исключениеэтогоВ той же строке что-то о канале прервано.

...