我有一个双工通道,它使用回调来提供更新作为订阅某些数据的一部分(请参阅下面的接口)。有时候这些数据是不可用的,当服务器需要关闭其订阅并让客户打开一个新的数据时,所以我想通知客户它需要这样做。如何在回拨通道上通知客户端故障?
- 这样做的正确方法是什么?
- 是否可以通过IUpdate接口传回
FaultException
?看起来throw new FaultException(...);
语法特定于请求响应。 - 我需要以某种方式返回自定义错误吗?
- 我是否需要添加一个新的
OnError
函数或类似的函数来显式强制客户端重新连接?
。
[ServiceContract(Namespace = "http://tempura.org/ISubscribe", Name = "ISubscribe", ConfigurationName = "Subscribe", CallbackContract = typeof(IUpdate))]
interface ISubscribe
{
[OperationContract]
long Subscribe();
[OperationContract(IsOneWay = true)]
void Unsubscribe(long index);
}
[ServiceContract(Namespace = "http://tempura.org/ISubscribe")]
public interface IUpdate
{
[OperationContract(IsOneWay = true)]
void OnUpdate(string update);
}
我不禁觉得双面WCF是sub/pub的糟糕实现。特别是当微软HAS的Sub/pub的实际实现,如SignalR。您甚至可以尝试使用消息队列或ESB。然后你甚至不会关心服务器故障。 – Aron