Клиент отправляет много сообщений на сервер из одного потока по одному каналу WCF.
Клиент отправляет сообщение с BeginMyMethod (x, b), так как он не хочет блокировать во время обработки.
У нас включен надежный обмен сообщениями, так как мы не хотим терять какие-либо сообщения или выводить их из строя.
Однако сообщения отправляются в несколько потоков на сервере, поэтому они обрабатываются не по порядку.
У нас не может быть однопоточного сервера, поскольку мы не хотим, чтобы длительный запрос от одного клиента блокировал других клиентов .
Так что я просто хочу обработать все сообщения, которые приходят от одного клиента (по одному каналу ) в порядке с только одним сообщение от каждого обрабатываемого клиента за один раз.
Это было бы легко для программирования сырых сокетов, однако как мне заставить WCF работать так, как я хочу?
Теперь я думаю, что ConcurrencyMode.Reentrant не работает должным образом при использовании с InstanceContextMode.Single Если я установил использование ConcurrencyMode.Single, то сообщения сохраняются в порядке, но мои обратные вызовы тупиковые.
(Тест, который выводит сообщения из строя, не имеет обратных вызовов и не делает никаких исходящих вызовов WCF, поэтому я ожидаю, что ConcurrencyMode.Reentrant будет вести себя так же, как ConcurrencyMode.Single в данном тесте, но это не так)
Я не использую файлы конфигурации WCF, код:
serviceHost = new ServiceHost(this);
serviceHost.AddServiceEndpoint(
typeof(IAllEngineManagersAsyncCallbacks),
new NetTcpBinding(SecurityMode.None, true),
endPointAddress);