English 中文(简体)
任务持久性 C#
原标题:Task Persistence C#

我很难完成我的任务,要坚持下去,无限期地逃避周转基金的服务。 我这样做可能是错误的,我愿意接受建议。

我的任务就是开始处理任何被丢入阻塞采集库的请求。 据我所知, GetCumpusingEnual () 方法应该允许我在数据到达时持续地拉动数据。 它本身没有问题。 我用一个窗口表格填写请求并提交, 处理了几十项请求, 没有任何错误或缺陷。 一旦我有信心, 我便通过一个 asmx 网络服务将它连接到我的网站上, 并使用 jQuery ajax 电话提交请求 。

网站根据提交的一个URL提交请求,网站服务处从 URL 下载 html 内容内容,并查找内容中的其他 URL 。 然后,网站开始为其找到的每个URL 创建请求, 并将其提交屏蔽集合。 在 WCF 服务中, 如果应用程序是在线的( 任务已经开始), 它会通过平行的 GetCumpingEnumber 提取请求。 ForEach and processes the request.

这对最初的少数提交文件有效, 但任务却突然停止了。 当然, 这比我在测试中模拟的要求要多10x多, 但我期望它只会加速。 我认为问题在于我开始任务的方法:

 public void Start()
        {
            Online = true;

            Task.Factory.StartNew(() =>
            {
                tokenSource = new CancellationTokenSource();
                CancellationToken token = tokenSource.Token;
                ParallelOptions options = new ParallelOptions();
                options.MaxDegreeOfParallelism = 20;
                options.CancellationToken = token;

                try
                {
                    Parallel.ForEach(FixedWidthQueue.GetConsumingEnumerable(token), options, (request) =>
                    {
                        Process(request);
                        options.CancellationToken.ThrowIfCancellationRequested();

                    });
                }
                catch (OperationCanceledException e)
                {
                    Console.WriteLine(e.Message);
                    return;
                }

            }, TaskCreationOptions.LongRunning);

        }

我曾经考虑过要把它 转到一个WF4服务系统, 并把它连接到一个工作流中, 并使用工作流持久性, 但是除非有必要, 我不愿意学习 WF4 。 请告诉我是否需要更多信息 。

最佳回答

您显示的代码本身是正确的 。

然而,有几件事情可能出错:

  • If an exception occurs, your task stops (of course). Try adding a try-catch and log the exception.
  • If you start worker threads in a hosted environment (ASP.NET, WCF, SQL Server) the host can decide arbitrarily (without reason) to shut down any worker process. For example, if your ASP.NET site is inactive for some time the app is shut down. The hosts that I just mentioned are not made to have custom threads running. Probably, you will have more success using a dedicated application (.exe) or even a Windows Service.
问题回答

这个问题的根源在于 WCF 绑定配置。 任务突然停止了, 因为 WCF 断绝了连接。 开放的超时设置是等待服务打开连接的时间 。 开启的超时设置是等待服务打开连接的时间 。 在某些情况下, 它达到最多 10 个连接的上限, 并导致连接被备份等待连接 。 我确保了在交易完成后我关闭了与主机的所有连接 - 所以我放弃了最大连接和开放的超时段 。 在此之后, 它无懈可击 。





相关问题
WCF DataMember Serializing questions

Ok, so I was part way through the long winded process of creating DTOs for sending my model over the wire and I don t feel like I m going down the right route. My issue is that most of the entities ...

Access WCF service on same server

I have a .NET website with a WCF service. How do I access the current operations context of my service? One possible work around is to just make a call to the service within the app...but that seems ...

WCF binding error

So I got into work early today and got the latest from source control. When I try to launch our ASP.NET application, I get this exception: "The binding at system.serviceModel/bindings/wsHttpBinding ...

The service operation requires a transaction to be flowed

I am facing strange issue with our WCF service. The same code was working fine until recently we added more OperationContracts(Web Methods). We have common 3 tier architecture. DAL (WCF) BLL Web ...

热门标签