Workflow Foundation 中的工作流程用于使用 InvokeWebService 活动调用ASMX Web服务,该活动具有 SessionId 属性以关联多个活动同一个会话(通过在每个请求上发送 ASP.NET会话cookie )。它奏效了。
现在我们已切换到 WCF Web服务界面,我们已将工作流程更改为使用 SendActivity 活动。但是,我们没有找到任何关联Web服务调用的解决方案,即在每个请求上发送会话cookie。
是否可以在WF中实现这一目标,还是需要自定义解决方案?
答案 0 :(得分:0)
我不知道在任何 WF / WCF集成活动中处理Cookie的任何内置工具( SendActivity 和 ReceiveActivity )。这是有道理的,因为WCF与传输无关,因此在高级别上,API无法耦合到任何特定于HTTP的功能,例如 ASMX Web服务。
您的案例中的解决方案可能是通过使用 basicHttpBinding 的端点公开WCF服务,该端点与ASMX Web服务支持的协议兼容,然后恢复使用 InvokeWebServiceActivity 以调用它们。
此外,由于可以通过任意数量的端点公开WCF服务,因此您只需将使用basicHttpBinding的端点添加到已存在的端点。这是一个例子:
<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>
然后,使用 InvokeWebServiceActivity 的工作流将使用以下URL调用服务: