Я новичок в WCF, я создал решение, в котором есть клиентское приложение WPF, связанное со службой WCF, назовем его TradingService (самостоятельно размещенный) с дуплексным связыванием (WsDualHttpBinding), а TradingService связано с другим WCF.service: MVGenerator (также duplex).
Идея здесь: клиентское приложение (WPF) вызывает метод TradingService getValues ().getValues () обрабатывает Data, перед возвратом он вызывает метод subscribe () в MVGenerator.После вызова метода Subscribe () MVGenerator генерирует случайные значения каждые 5 секунд и отправляет их в TradingService через функцию обратного вызова.А обработчик обратного вызова в TradingService вызывает другой обратный вызов, который обрабатывается в клиентском приложении.
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 ». '
Иногда вместо этого выдается другое исключениеэтогоВ той же строке что-то о канале прервано.