La misma sesión con múltiples actividades de SendActivity en WF
-
05-07-2019 - |
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?
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: