none
Sesiones en WCF RRS feed

  • Pregunta

  • Que tal! ojala pudieran ayudarme con la siguiente cuestion.

    Quiero utilizar sesiones en mi WCF sobre https y utilizar autenticacion de windows. Describo un poco mas mi problema:

    Tengo un WCF y su webconfig es el siguiente:
    ----------------------
      <system.serviceModel>
        <protocolMapping>
          <add scheme="https" binding="wsHttpBinding" bindingConfiguration="NewBinding0"/>
        </protocolMapping>
        <bindings>
          <wsHttpBinding>
            <binding name="NewBinding0">
              <security mode="Transport">
                <transport clientCredentialType="Windows" proxyCredentialType="Windows" />
              </security>
            </binding>
          </wsHttpBinding>
        </bindings>
        <services>
          <service behaviorConfiguration="BehaviorConfig" name="Acceso">
            <endpoint address="Acceso" binding="wsHttpBinding" bindingConfiguration="NewBinding0"
             name="ConfigConsulta" contract="IAcceso" listenUri="Acceso" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="BehaviorConfig">
              <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
              <useRequestHeadersForMetadataAddress>
                <defaultPorts>
                  <add scheme="https" port="443" />
                </defaultPorts>
              </useRequestHeadersForMetadataAddress>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="false"
       multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
         </system.webServer>
    --------------------------------

    Un ejemplo corto de mi código se muestra a continuación. Donde tengo 2 variables globales User y Idrmun.
    ---------------------------------
    <ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession, ConcurrencyMode:=ConcurrencyMode.Multiple)> _
    Public Class Acceso
        Implements IAcceso
          Private User As String = ""
          Private Idrmun As Integer = 0
        Public Function CheckUsrPwd(ByVal usr As String, ByVal pwd As String) As Integer Implements IService.CheckUsrPwd
                   User = usr
                   Idrmun = 15
            Return User
        End Function
        Public Function FillEst() As String Implements IService.FillEst
            IF User == ""
                  Return "-1"
           ELSE
                  Return User
        End Function   
    ----------------

    Despues consumo con una aplicacion cliente tel primer metodo CheckUsrPwd y despues consumo FillEst y este ultimo regresa "-1"

    Si cambio en mi WCF el instanceContextMode a Single, Funciona bieny me regresa el usuario en vez de "-1" -->   <ServiceBehavior(InstanceContextMode:=InstanceContextMode.Single, ConcurrencyMode:=ConcurrencyMode.Multiple)> _


    pero si otra aplicacion cliente consume el primer metodo y la primera vuelve a consumir el segundo metodo  mi variable global cambia al ultimo nombre del usuario que se firmo, se que debo de poner InstanceContextMode = PerSession por que  Single mode utiliza el mismo objeto para todas las sesiones Que puedo Hacer?????

    He leido que debo activar el "reliablesession" en mi binding pero  WSHTTPBINDING no tiene "reliablesession" y quiero seguir usando Autentificacion de Windows.  Ya he intentado con diferentes configuraciones de bindings y nada.

     

     

    Gracias por su ayuda!!

    miércoles, 5 de enero de 2011 22:50

Todas las respuestas