我们有一个当前运行的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客户端。
我在正确的轨道上吗?
发布于 2014-09-19 20:56:36
我看到"COBOL getData“一次处理一个请求,因为它是单例的。如果您将wcf实例设置为singleton,则来自客户端的所有请求都将是连续的,一个请求将等待另一个请求。因此,您不需要在另一个cobol程序"COBOL program 1“中管理带有ID的请求。只需在下面添加服务行为
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single)]发布于 2014-09-22 16:59:43
如果您希望您的服务在不阻塞GUI的情况下更好地响应客户端,则必须使用回调来构建您的服务。将你的cobol程序调用者放在一个单例类中,并同步它以防止并发访问。在您的WCF服务方法中,在线程池操作中调用cobol调用方。cobol程序返回后,调用您的回调通知客户端。只有nettcpbinding、namedpipebinding和wsdualhttpbindins支持回调操作。
请查看以下链接:
Duplex Services
What You Need To Know About One-Way Calls, Callbacks, And Events
https://stackoverflow.com/questions/25021511
复制相似问题