C# 在回调中回调时WCF InvalidOperationException
我有这样的服务:C# 在回调中回调时WCF InvalidOperationException,c#,wpf,callback,invalidoperationexception,C#,Wpf,Callback,Invalidoperationexception,我有这样的服务: [ServiceContract(SessionMode = SessionMode.Required, CallbackContract=typeof(IMyServiceCallback))] public interface IMyService { [OperationContract] bool CallService(); } public interface IMyServiceCallback { [OperationContract(
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract=typeof(IMyServiceCallback))]
public interface IMyService
{
[OperationContract]
bool CallService();
}
public interface IMyServiceCallback
{
[OperationContract(IsOneWay = true)]
void NotifyClient();
}
在NotifyClient()的实现中,我尝试调用CallService()。这将导致InvalidOperation异常:
其他信息:此操作将死锁,因为在当前消息完成处理之前无法接收回复。如果要允许无序消息处理,请指定CallbackBehaviorAttribute上可重入或多个的并发模式
“我的服务”的ServiceBehavior设置如下:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
我的回调函数的CallbackBehavior为:
[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
是什么导致了这种异常?我也尝试过使用ConcurrencyMode.Reentrant,但那没有帮助。我可以通过在工作线程上调用CallService()来解决这个问题,但我仍然想知道是什么导致了异常
谢谢
编辑:添加了[OperationContract(IsOneWay=true)],但问题仍然存在。尝试将回调中的OperationContract设置为
[OperationContract(IsOneWay = true)]
您是否尝试在单独的线程上调用NotifyClient()回调?这应该避免任何可能的死锁
public class Service : IMyService
{
public bool CallService()
{
IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
Task.Factory.StartNew((cb) => cb.NotifyClient(), callback);
}
}
公共类服务:IMyService
{
公共布尔呼叫服务()
{
IMyServiceCallback=OperationContext.Current.GetCallbackChannel();
Task.Factory.StartNew((cb)=>cb.NotifyClient(),回调);
}
}
我也试过,但没有用。(我应该在我的描述中包括这一点…)您能发布NotifyClient和CallService的实现吗?Notify client除了调用proxy.CallService()之外什么都不做。CallSerive方法不必包含任何内容,就可以发生此异常。我自己创建的代理来自DuplexClientBase。因为我已经能够通过在另一台therad上调用CallService来克服这个问题,所以我暂时不打算进一步调查。谢谢你的帮助!我已经找到了问题的原因。我只把CallbackBehavior放在基类上,而不是孩子们!