Czy ConcurrencyMode z Multiple ma znaczenie, gdy InstanceContextMode jest PerCall dla usługi WCF z wiązaniem Net.Tcp?

Zawsze myślałem, że ustawienie InstanceContextMode na PerCall sprawia, że ​​tryb współbieżności jest nieistotny, nawet jeśli używa się powiązania świadomego sesji, takiego jak net.tcp. Tak mówi MSDNhttp://msdn.microsoft.com/en-us/library/ms731193.aspx „W PerCallinstancing współbieżność nie jest istotna, ponieważ każdy komunikat jest przetwarzany przez nowy InstanceContext, dlatego w InstanceContext nigdy nie jest aktywny więcej niż jeden wątek.”

Ale dzisiaj przeglądałem książkę Juval Lowy Programming WCF Services i pisze w rozdziale 8

Jeśli usługa wywołania ma sesję na poziomie transportu, to czy dozwolone jest jednoczesne przetwarzanie wywołań jest produktem trybu współbieżności usługi. Jeśli usługa jest skonfigurowana za pomocą ConcurrencyMode.Single, równoczesne przetwarzanie oczekujących połączeń nie jest usuwane, a połączenia są wysyłane pojedynczo. [...] Uważam to za wadliwy projekt. Jeśli usługa jest skonfigurowana za pomocą ConcurrencyMode.Multiple, jednoczesne przetwarzanie jest dozwolone. Wywołania są wysyłane w momencie ich nadejścia, każde do nowej instancji i wykonywane jednocześnie. Ciekawym spostrzeżeniem jest to, że w interesie przeszukiwania dobrym pomysłem jest skonfigurowanie usługi wywołania za pomocą ConcurrencyMode.Multiple - sama instancja nadal będzie bezpieczna dla wątków (więc nie poniesiesz odpowiedzialności za synchronizację) , a jednak zezwolisz na jednoczesne połączenia od tego samego klienta.

Jest to sprzeczne z moim rozumieniem i tym, co mówi MSDN. Który jest poprawny ? W moim przypadku mam usługę WCF Net.Tcp używaną przez wiele aplikacji klienckich, które tworzą nowy obiekt proxy, wykonują wywołanie, a następnie natychmiast zamykają proxy. Usługa ma PerCall InstanceContextMode. Czy uzyskuję lepszą przepustowość, jeśli zmienię InstanceContextMode na Multiple bez gorszego zachowania bezpieczeństwa wątku niż percall?

questionAnswers(1)

yourAnswerToTheQuestion