【问题标题】:WCF Service and COBOL VMWCF 服务和 COBOL 虚拟机
【发布时间】:2014-09-21 04:35:14
【问题描述】:

我们有一个当前正在运行的 WCF 服务和 COBOL VM 进行通信,以提供对来自 Vision 文件的数据的访问。该过程有效,但我们必须将 WCF 服务限制为[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]。它可以工作,但有时对用户来说似乎很慢,因为他们正在排队并且某些请求有时超过几秒钟。

COBOL VM 是一个单例,所以我不相信我可以将我的 COBOL 程序与多个 WCF 服务请求隔离开来,而不会使它们相互影响。 COBOL 程序无法知道哪个客户端的调用是什么,它只是返回/操作数据。

我的想法是在 COBOL 中创建一个程序来管理我的请求,但我不确定如何将该信息返回给 WCF 服务,以便它响应正确的客户端请求。

我的想法是传递 WCF 客户端请求的一些 ID,例如 guid。 COBOL 程序将存储 WCF guid 并调用另一个程序,该程序使用该 guid 在 COBOL 中为我获取数据。 COBOL 程序然后返回带有 ID 的数据,但我需要一些方法来确保将正确请求的数据路由到正确的 WCF 客户端请求。

过程:

WCF Client 1->WCF Service (creates WCF_id1)->COBOL program 1(WCF_id1)->COBOL getData(WCF_id1).
WCF Client 2->WCF Service (creates WCF_id2)->COBOL program 1(WCF_id2)->COBOL getData(WCF_id2).
WCF Service stores both Wcf_id1 and Wcf_id2 somehow associating them with the WCF Client that requested them.

COBOL program 1 stores both Wcf_id1 and Wcf_id2 and makes the request to COBOL getData individually passing in the ids.
Both Client 1 and Client 2 are waiting for a response.

COBOL getData(WCF_id2)->COBOL program 1(WCF_id2)->WCF Service(WCF_id2)

从这里,我如何确保 WCF 客户端 2 获取此数据而不是 WCF 客户端 1?

我想查看从 COBOL 程序返回的数据,然后将其路由到请求它的客户端。这在 WCF 中可行吗?

我一直在查看 WCF 回调,认为我可以使用回调来查询 WCF_id,然后将数据返回到正确的 WCF 客户端。

我在正确的轨道上吗?我应该看看其他一些 WCF 功能吗?

【问题讨论】:

    标签: c# wcf cobol vision


    【解决方案1】:

    我看到“COBOL getData”一次处理一个请求,因为它是单例的。如果您将 wcf 实例设置为单例,则来自客户端的所有请求将是顺序的,一个将等待另一个。因此,您不需要在其他 cobol 程序“COBOL 程序 1”中管理具有 ID 的请求。只需在下面添加服务行为

    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single)]
    

    【讨论】:

    • 是的。我希望使它更多的多用户。您上面提到的方式是有效的,但是随着用户排队并且长时间运行的进程可能会开始向其他用户发送超时消息,速度会很慢。我可以添加额外的配置,但它仍然会给我提供我目前拥有的同样有限的系统。
    【解决方案2】:

    如果您希望您的服务能够更好地响应客户端,而不阻塞 GUI,您必须使用回调构建您的服务。将你的 cobol 程序调用者放在一个单例类中并同步它以防止并发访问。在您的 WCF 服务方法中,调用线程池操作中的 cobol 调用程序。 cobol 程序返回后,调用你的回调通知客户端。考虑到只有 nettcpbinding、namedpipebinding 和 wsdualhttpbindins 支持回调操作。

    查看这些链接:

    Duplex Services

    What You Need To Know About One-Way Calls, Callbacks, And Events

    【讨论】:

    • 回调可能是可能的。里面有一些我不熟悉的技术,所以我需要一段时间来尝试一下。谢谢。
    猜你喜欢
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2014-07-06
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多