PerCall
и SessionMode.NotAllowed
«менее» специфичны / ограничены, чем ваши текущие настройки.Вы легко сможете перейти к этим настройкам, если поймете фундаментальное значение: больше нет состояния между вызовами в экземплярах ваших служб.
При этом я не уверен, что понимаю, что вы подразумеваете подMsgstr "Синглтон на службе, которая содержит все контексты клиента".Можете ли вы уточнить?Я думаю, что вы имеете в виду состояние удержания в пределах одноэлементного (статического поля?) В реализации сервиса.Доступ к этому из экземпляров PerCall
будет нормальным, просто помните, что вы должны обеспечить блокировку этого состояния.Вот, например, как вы могли бы поддерживать список обратных вызовов.
Кроме того, ваше представление о том, что TCP является только сеансом, неверно.Помните, HTTP - это протокол, построенный поверх TCP.Да, сокеты TCP остаются подключенными в течение некоторого времени (остаются активными), поэтому их можно использовать повторно, но сообщения, которые вы отправляете через них, могут быть совершенно не связаны друг с другом.Так что, если вы будете использовать NetTcpBinding, все будет в порядке.Точно так же вы можете технически выполнять сеансы через транспорт HTTP.Кроме того, если вы переключились на транспорт на основе HTTP, у вас нет для использования кодировки текста.Вы можете отправлять двоичный контент через HTTP-транспорт, для этого просто необходимо настроить пользовательскую привязку, которая будет выглядеть примерно так:
<bindings>
<customBinding>
<binding name="MyBinaryOverHttpBinding">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>