Порядок вызовов WCF в режиме единого параллелизма - PullRequest
0 голосов
/ 23 августа 2011

Предположим, что служба WCF имеет ServiceBehavior.ConcurrencyMode = Single.

Когда именно служба начинает блокировать одновременные вызовы?

Например, скажем, у нас есть два клиента: медленный и быстрый.

At time 0 Slow starts a slow service call that includes a huge chunk of data.
At time 1 Fast makes a fast service call.
At time 2 the slow data finally arrives and the service code is executed on the server.

Предполагая, что буферы, настроенные в WCF, больше, чем огромный кусок, какой вызов будет выполнен первым?

Другими словами, начинается ли блокировка, когда все данные вызова получены на стороне сервера или когда клиент инициирует вызов?

Служба заблокирована во время передачи данных или только во время выполнения кода?

1 Ответ

0 голосов
/ 23 августа 2011

Если вы не настроите InstanceContextMode на Single, оба вызова будут выполняться одновременно. Итак, предположим, что у вас InstanceContextMode установлено Single.

Я не проверял, но ожидал такого поведения. Режим параллелизма - это поведение службы, поэтому он происходит после разрешения контекста / экземпляра службы. В режиме с буферизацией, который происходит после получения всего сообщения в режиме потоковой передачи, это должно происходить после получения заголовков сообщений. Так что в случае буферизованного транспорта, я ожидаю, что быстрый клиент будет обработан первым, а в случае потокового транспорта это зависит от того, были ли уже получены заголовки сообщений от медленного клиента.

Но, как я уже писал, это только мое ожидание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...