6

我们有一个当前正在运行的 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 功能吗?

4

2 回答 2

0

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

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single)]
于 2014-09-19T12:56:36.117 回答
0

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

查看这些链接:

双工服务

关于单向调用、回调和事件您需要了解的内容

于 2014-09-22T08:59:42.837 回答