Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在回调中回调时WCF InvalidOperationException_C#_Wpf_Callback_Invalidoperationexception - Fatal编程技术网

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放在基类上,而不是孩子们!