我是WCF的新手,我创建了一个解决方案,该解决方案具有链接到WCF服务的WPF客户端应用程序,我们将其称为具有双工绑定(WsDualHttpBinding)的TradingService(自托管),而TradingService链接至另一个WCF服务:MVGenerator(也为双工)。
这里的想法是:客户端应用程序(WPF)调用TradingService的getValues()方法。 getValues()处理数据,然后在返回之前调用MVGenerator中的subscription()方法。调用Subscribe()方法后,MVGenerator每5s生成一次随机值,然后通过回调将其推送到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”。
有时会引发另一个异常而不是这个异常。在同一行中,有关通道的某些操作已终止。