次のようなサービスがあります。
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract=typeof(IMyServiceCallback))]
public interface IMyService
{
[OperationContract]
bool CallService();
}
public interface IMyServiceCallback
{
[OperationContract(IsOneWay = true)]
void NotifyClient();
}
NotifyClient() の実装で、CallService() を呼び出そうとします。これにより、InvalidOperationException が発生します。
追加情報: 現在のメッセージの処理が完了するまで応答を受信できないため、この操作はデッドロックになります。順不同のメッセージ処理を許可する場合は、CallbackBehaviorAttribute に Reentrant または Multiple の ConcurrencyMode を指定します。
私のサービスには ServiceBehavior が次のように設定されています。
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
そして私のコールバックは CallbackBehavior を次のように持っています:
[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
この例外の原因は何ですか? ConcurrencyMode.Reentrant も使用してみましたが、役に立ちません。ワーカー スレッドで CallService() を呼び出すことで問題を回避できますが、例外の原因を知りたいです。
ありがとう。
編集: [OperationContract(IsOneWay = true)] を追加しましたが、問題は残ります。