Pregunta

Nuestro flujo de trabajo en Workflow Foundation se utiliza para llamar a los servicios web de ASMX mediante la actividad InvokeWebService , que tiene una propiedad SessionId para correlacionar múltiples actividades en la misma sesión (enviando la cookie de sesión ASP.NET en cada solicitud ). Funcionó.

Ahora hemos cambiado a la interfaz del servicio web WCF , y hemos cambiado nuestros flujos de trabajo para utilizar la actividad SendActivity . Sin embargo, no hemos encontrado ninguna solución para correlacionar las invocaciones de servicios web, es decir, enviar la cookie de sesión en cada solicitud.

¿Es posible lograr esto en WF o necesitamos una solución personalizada?

¿Fue útil?

Solución

No tengo conocimiento de ninguna función integrada para el manejo de cookies en ninguna de las actividades Integración WF / WCF ( SendActivity y ReceiveActivity ). Esto tiene sentido, ya que WCF es agnóstico al transporte y, por lo tanto, a un nivel alto, las API no se pueden acoplar a ninguna característica específica de HTTP, como en el caso de Servicios web ASMX .

Una solución en su caso podría ser exponer los servicios de WCF a través de un punto final que utiliza el basicHttpBinding , que es compatible con el protocolo compatible con los servicios web de ASMX, y luego volver a utilizar el InvokeWebServiceActivity para invocarlos.

Además, dado que un servicio WCF se puede exponer a través de cualquier número de puntos finales , simplemente puede agregar un punto final que use el enlace básicoHttp a los que ya están allí. Aquí hay un ejemplo:

<configuration>
    <system.serviceModel>
        <services>
            <service name="MyNamespace.MyServiceImpl">
                <endpoint binding="wsHttpBinding" name="WsHttp"
                    contract="MyNamespace.IMyService" />
                <endpoint address="basic" binding="basicHttpBinding" name="BasicHttp"
                    contract="MyNamespace.IMyService" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost/myservice" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

Luego, los flujos de trabajo que utilizan InvokeWebServiceActivity invocarían el servicio utilizando la siguiente URL:

  

http: // localhost / myservice / basic

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top