C# WCF服务与cobolvm

C# WCF服务与cobolvm,c#,wcf,cobol,vision,C#,Wcf,Cobol,Vision,我们有一个当前运行的WCF服务和COBOL VM通信,以提供对Vision文件中数据的访问。这个过程是可行的,但我们必须将WCF服务限制为[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single)]。它可以工作,但有时对用户来说似乎很慢,因为他们正在排队,而且有些请求有时超过几秒钟 COBOLVM是一个单例程序,因此我不相信我可以将我的COBOL程序与多个WCF服务请求隔离开来,而不让它们相互干扰。COBOL程序无法知道哪个客户机的调用是什么

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

COBOLVM是一个单例程序,因此我不相信我可以将我的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功能吗?

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

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

如果您希望您的服务对客户机更加响应,而不阻塞GUI,那么您必须使用回调来构建您的服务。将cobol程序调用者放在一个单例类中,并同步它以防止并发访问。在WCF服务方法中,在线程池操作中调用cobol调用方。cobol程序返回后,调用回调以通知客户端。考虑只有NETTCP绑定、NAMEDPEPPENDIN和WSDUAL HTTPBIDIN支持回调操作。 查看以下链接:


是的。我希望能让它更加多用户。您上面提到的方法是有效的,但是随着用户排队,进程可能会开始发送其他用户超时消息,速度会变慢。我可以添加额外的配置,但它仍然会给我提供与当前相同的有限系统。回调可能是一种可能性。这里有一些我不熟悉的技术,所以我需要一段时间来尝试。谢谢