Рекомендуется использовать сервисы без сеанса, потому что введение сеанса приводит к другим сложностям.
В вашем случае сервис SOAP может быть защищен с помощью сеанса безопасности (контекст безопасности), который обеспечивается WS-SecureConversation, WS- Доверие и т. Д. При использовании любого вида сеанса WCF необходимо повторно использовать один и тот же экземпляр прокси-сервера службы.Сеанс существует между конкретным прокси и экземпляром службы.Как только любой из этих умирает или возникает ошибка соединения, сеанс пропадает, и вы должны открыть новый прокси.
При использовании безопасного разговора вы вводите необходимые учетные данные в прокси службы и запускаете ваше сообщение.Прокси-сервер отправит эти учетные данные службе, а служба создаст токен безопасности, который будет использоваться для последующей связи.Это начальное рукопожатие имеет некоторые дополнительные расходы.Следующее сообщение защищено токеном.WCF использует это вместе с шифрованием и подписью на уровне сообщений, что имеет еще одну дополнительную стоимость.Вы можете отключить шифрование и подпись для некоторых частей сообщения, но по крайней мере информация, связанная с аутентификацией, должна быть зашифрована.
Базовая конфигурация для такой службы может выглядеть следующим образом:
<bindings>
<wsHttpBinding>
<binding name="secured">
<security mode="Message">
<message clientCredentialType="UserName" estabilishSecurityContext="true"
negotiateServiceCredentials="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="securedService">
...
<serviceCredentials>
<!-- Allows configuring how user name and password will be validated -->
<userNameAuthentication ... />
<!-- Message security with user name and password credentials requires service certificate -->
<serviceCertificate ... />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="..." behaviorConfiguration="securedService">
<endpoint address="" contract="..." binding="wsHttpBinding"
bindingConfiguration="secured" />
</service>
</services>
Это стандартный подход к выполнению этого в WCF с защитой, интегрированной в конвейер безопасности WCF.Любой другой подход в основном сводится к обходу защитного конвейера WCF или изменению защитного конвейера - оба эти подхода могут потребовать много пользовательских разработок.