HPC BrokerClient需要很长时间才能执行,并在尝试获取结果时抛出错误

时间:2014-03-28 21:29:05

标签: c# wcf soa hpc

我正在尝试让我的示例WCF服务在内部部署的HPC 2012 SP1群集上运行。它是2012 HPC WCF应用程序。我的测试服务部署到

中的所有Compute节点

群集和配置文件也部署在头节点上。在我的客户端应用程序中,我在我的服务代理客户端上使用BrokerClient包装器。使用HPC群集

经理我可以看到我的服务被调用并运行,但速度非常慢,他需要大约5分钟才能完成执行(这是一个简单的测试服务,没有强化

操作)。而且在我的客户端应用程序中,我在任务在集群上执行完毕后会出现以下错误:

"由于失去心跳,经纪人无法使用。 确保您可以连接到代理节点,HpcBroker服务正在代理节点上运行,并且会话仍在运行。"

这是我的客户代码:

    SessionStartInfo info = new SessionStartInfo(this.textBox1.Text, this.textBox2.Text);
        info.SessionResourceUnitType = SessionUnitType.Core;
        info.Secure = false;
        info.MinimumUnits = 1;
        info.MaximumUnits = 1;
        using (Session s = Session.CreateSession(info))
        {
            NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, false);
            using (BrokerClient<IHpcTestService> client = new BrokerClient<IHpcTestService>(s, binding))
            {
                ApplyCalculationsRequest request = new ApplyCalculationsRequest("test");

                client.SendRequest<ApplyCalculationsRequest>(request);
                client.EndRequests();

                foreach (var resp in client.GetResponses<ApplyCalculationsResponse>())
                {
                    this.label3.Text = resp.Result.ApplyCalculationsResult;
                    break;
                }

            }
        }

P.S。当我尝试使用普通代理客户端时,没有BrokerClient包装器,一切正常。

关于上述的任何想法?

1 个答案:

答案 0 :(得分:0)

重新缓慢,你需要提供更多关于你正在谈论什么样的减速的细节。您可以看到各个区域的缓慢,每个区域都是由不同的区域引起的。

如果作业创建缓慢,则会在头节点上发生这种情况 如果将任务提交到作业和执行EndRequests的速度很慢,则会在Broker节点上发生这种情况,因为请求将被写入代理作业的代理节点上的MSMQ文件夹。 如果作业运行时缓慢,则这是工作节点的问题;这可能是由于数据库连接速度缓慢或应用程序普遍缓慢造成的,或者如果您使用服务的中央共享位置而不是本地副本,这也可能导致速度缓慢。

至于你得到的错误:

“由于心跳丢失,代理不可用。请确保您可以连接到代理节点,HpcBroker服务正在代理节点上运行,并且会话仍在运行。”

当出于任何原因使用BrokerClient包装器时,HPC发送2个最终回调消息而不是仅发送一个。对于任何给定的作业,列表中的最终任务(但不一定是列表中最后执行的任务)都有一个bool,将其指定为最后一个任务。当您收到所有回调并重新连接到作业并关闭它时,它会发送一条最终消息,由于服务通道已关闭,您无法打开该消息。当你有一个BrokerClient包装器时,我不知道为什么会这样做;我还没搞清楚。基本上如果我不是每个作业多次看到该消息,我会忽略它。

出于好奇,您可以发布与使用代理客户端相关的代码吗?