Tengo un servicio WCF con wsHttpBindings y SSL habilitado, pero me gustaría habilitar las sesiones de WCF.Cómo habilitar la sesión con SSL wsHttpBinding en WCF
Después de cambiar a SessionMode requerido
SessionMode:=SessionMode.Required
estoy recibiendo el error se describe a continuación.
El contrato requiere la sesión, pero el enlace 'WSHttpBinding' no es compatible con o no está configurado correctamente para admitirlo.
Aquí está mi aplicación de muestra.
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<client />
<bindings>
<wsHttpBinding>
<binding name="NewBinding0" useDefaultWebProxy="false" allowCookies="true">
<readerQuotas maxStringContentLength="10240" />
<!--reliableSession enabled="true" /-->
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" >
<extendedProtectionPolicy policyEnforcement="Never" />
</transport >
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="WcfServiceLib.TestService">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="NewBinding0"
contract="WcfServiceLib.ITestService">
<identity>
<servicePrincipalName value="Local Network" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://test/TestService.svc" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
ITestService.vb
<ServiceContract(SessionMode:=SessionMode.Required)>
Public Interface ITestService
<OperationContract(IsInitiating:=True, IsTerminating:=False)> _
Function GetData(ByVal value As Integer) As String
End Interface
TestService.vb
<ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession, _
ReleaseServiceInstanceOnTransactionComplete:=False, _
ConcurrencyMode:=ConcurrencyMode.Single)>
Public Class TestService
Implements ITestService
Private _user As User
<OperationBehavior(TransactionScopeRequired:=True)>
Public Function GetData(ByVal value As Integer) As String _
Implements ITestService.GetData
If _user Is Nothing Then
_user = New User()
_user.userName = "User_" & value
_user.userPassword = "Pass_" & value
Return String.Format("You've entered: {0} , Username = {1} , Password = {2} ", _
value, _user.userName, _user.userPassword)
Else
Return String.Format("Username = {1} , Password = {2} ", _
_user.userName, _user.userPassword)
End If
End Function
End Class
Probé po soluciones posibles, pude encontrar, pero nada ayudó.
Algunos consejos para que sesiones fiables, pero no trabajar con ssl (aunque sólo sea vinculante que tiene su medida), otros consejos para utilizar http en lugar de https , pero me Me gusta habilitar Sesiones con mis configuraciones actuales, si es posible.
¿Hay algún enfoque para lograr esto?
Cualquier tipo de ayuda es muy apreciada.
¿Cuál es el motivo para habilitar el estado de la sesión en el servicio wcf? Esto podría ser un cuello de botella si está buscando un alto rendimiento. Se debe evitar el servicio de wcf del estado de la sesión. –
Me gustaría tener una _variable de usuario para cada sesión. Obtengo una nueva instancia de clase de servicio para cada llamada. _El valor del usuario siempre es Nada. – hgulyan
¿Qué solución debo usar para mi situación si necesito almacenar datos para cada cliente? – hgulyan