にコールバックするとき、私はこのようなサービスがあります。NotifyClient(の実装でWCF InvalidOperationExceptionがコールバック
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract=typeof(IMyServiceCallback))]
public interface IMyService
{
[OperationContract]
bool CallService();
}
public interface IMyServiceCallback
{
[OperationContract(IsOneWay = true)]
void NotifyClient();
}
を)私はCallService(への呼び出しを試みます)。これにより、InvalidOperationExceptionが発生します。
追加情報:この操作は、現在のメッセージが処理を完了するまで受信できないため、デッドロックになります。アウトオブオーダーのメッセージ処理を許可する場合は、ConcurrencyModeをReentrant、またはMultipleをCallbackBehaviorAttributeに指定します。
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
を、私のコールバックとしてCallbackBehaviorがあります:この例外を発生させたことができるもの
[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
次のように
は私のサービスはServiceBehaviorが設定されていますか?私もConcurrencyMode.Reentrantを使ってみましたが、それは役に立ちません。私は、ワーカースレッドでCallService()を呼び出すことによって問題を解決することができますが、私はまだ例外の原因を知りたいと思います。
ありがとうございました。
編集:[OperationContract(IsOneWay = true)]が追加されましたが、問題は残ります。
私もこれを試しましたが、役に立たないです。 (私は私の記述にそれを含めるべきだった...)。 – MrNick
NotifyClientとCallServiceの実装を投稿できますか? – Dominik
通知クライアントは、proxy.CallService()を呼び出す以外は何もしません。また、CallSericveメソッドには例外が発生するために何も含める必要はありません。私が作成したプロキシは、DuplexClientBaseから派生しています。私は別のtheradでCallServiceを呼び出すことによって問題を克服することができたので、私は当面はそれ以上調べるつもりはない。あなたの助けをありがとう! –
MrNick