WF 中具有多个 SendActivity 活动的同一会话

发布于 2024-07-11 00:58:23 字数 398 浏览 4 评论 0原文

Workflow Foundation 中的工作流过去使用 InvokeWebService 活动调用 ASMX Web 服务,该活动具有属性 SessionId 来关联同一会话中的多个活动(通过在每个请求上发送 ASP.NET 会话 cookie)。 有效。

现在,我们已切换到 WCF Web 服务接口,并且已更改工作流程以改用 SendActivity 活动。 然而,我们还没有找到任何解决方案来关联 Web 服务调用,即在每个请求上发送会话 cookie。

是否可以在 WF 中实现此目的,或者我们是否需要自定义解决方案?

Our workflow in Workflow Foundation used to call ASMX web services using the InvokeWebService activity, which has a property SessionId to correlate multiple activities in the same session (by sending the ASP.NET session cookie on every request). It worked.

Now we have switched to WCF web service interface, and we have changed our workflows to use the SendActivity activity instead. However, we haven't found any solution to correlate the web service invocations, i.e. sending the session cookie on every request.

Is it possible to achieve this in WF, or do we need a custom solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暮年 2024-07-18 00:58:23

我不知道 WF/WCF 集成 活动(SendActivityReceiveActivity)中有任何用于处理 cookie 的内置工具。 这是有道理的,因为 WCF 与传输无关,因此在较高级别上,API 无法耦合到任何特定于 HTTP 的功能,例如 ASMX Web 服务

您的情况的解决方案可能是通过使用 basicHttpBinding 的端点公开 WCF 服务,该端点与 ASMX Web 服务支持的协议兼容,然后恢复使用 InvokeWebServiceActivity< /strong> 来调用它们。

此外,由于 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 调用该服务:

http://localhost/myservice/basic

I am not aware of any built-in facility for handling cookies in any of the WF/WCF integration activities (SendActivity and ReceiveActivity). This makes sense since WCF is transport-agnostic, and therefore at a high level the APIs cannot be coupled to any HTTP-specific features like in the case of ASMX Web Services.

A solution in your case could be to expose the WCF services through an endpoint that uses the basicHttpBinding, which is compatible with the protocol supported by ASMX Web Services, and then revert to using the InvokeWebServiceActivity to invoke them.

Also, since a WCF service can be exposed through any number of endpoints, you can simply add an endpoint that uses the basicHttpBinding to the ones that are already there. Here is an example:

<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>

Then the workflows that use the InvokeWebServiceActivity would invoke the service using the following URL:

http://localhost/myservice/basic

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文