WCF服务和COBOL虚拟机

6
我们目前有一个正在运行的WCF服务和COBOL虚拟机进行通信,以提供对Vision文件中数据的访问。这个过程是有效的,但我们必须将WCF服务限制为[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]。它有效,但有时用户会感觉慢,因为他们被排队了,有些请求有时长达几秒钟。
COBOL VM是单例的,所以我认为我不能在多个WCF服务请求之间隔离我的COBOL程序,否则它们会相互干扰。COBOL程序没有办法知道哪个调用是为哪个客户端,它只是返回/操作数据。
我的想法是创建一个COBOL程序来为我管理请求,但我不确定如何将那些信息传回WCF服务,以便正确响应客户端请求。
我的想法是传递一些WCF客户端请求的ID,例如guid。COBOL程序将存储WCF guid并调用另一个程序,在COBOL中使用guid获取数据。然后,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功能?

2个回答

0

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

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

是的。我希望使它更多用户化。您上面提到的方法虽然可行,但随着用户排队等待,速度会变慢,而且长时间运行的进程可能会开始向其他用户发送超时消息。我可以添加额外的配置,但它仍然会给我带来目前所拥有的同样有限的系统。 - Martin

0

如果您想让您的服务对客户更加响应,而不会阻塞GUI,则必须使用回调构建您的服务。将您的COBOL程序调用者放在单例类中并进行同步以防止并发访问。在您的WCF服务方法中,使用线程池操作调用COBOL调用者。在COBOL程序返回后,调用您的回调以通知客户端。请注意,只有nettcpbinding、namedpipebinding和wsdualhttpbindins支持回调操作。

查看以下链接:

Duplex Services

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


回调可能是一种可能性。其中有几种技术我不熟悉,所以需要一段时间来尝试。谢谢。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接