Wcf客户端和长期运营

时间:2014-08-14 10:22:45

标签: c# wcf

美好的一天!

我有简单的wcf服务和桌面客户端,它使用一些功能。 但我的客户端错误,除了我的wcf操作太长了。

一些代码:

 client=new MyWcfServiceClient();
 client.DoWork(param1,param2..etc);

我不需要等待DoWork工作。我需要执行这个方法并继续前进。这就像发送命令做一些工作,我不需要立即得到结果。

怎么做? 谢谢!

P.S。服务器端代码如下:

 DoWork(param1,etc)
   {
   // do long-term work at same thread
    }

P.P.S。我知道了结果。

4 个答案:

答案 0 :(得分:2)

在服务上,将您的逻辑从:DoWork(param1等)转移到另一个方法,例如: DoWorkBackground(...)

static Task _backgroundTask;

void DoWork(param1, etc)
{
    if (_backgroundTask == null || _backgroundTask.IsCompleted)
        _backgroundTask = System.Threading.Tasks.Task.Run(
                                                () => DoWorkBackground(param1, etc) );
}

void DoWorkBackground(param1, etc)
{
    //long running logic
}

答案 1 :(得分:1)

你可以做点什么:

private static Task DoWork()
{
   // do stuff here
   // return something (?) assuming you need or care about this
}

然后你可以做类似

的事情
Task task = DoWork().Start;   
// you can wait, poll, or if you don't care, ignore the result

答案 2 :(得分:1)

使用.NET 4.5,您可以在向应用程序添加服务引用的同时创建基于任务的代理。可以通过单击“添加服务引用”对话框中的“高级”按钮来完成此操作。有关详细信息,请参阅here

完成此操作后,您将获得以下内容:DoWorkAsync

使用这个新代理你可以这样做:

var result = await client.DoWorkAsync(param1,param2..etc);

答案 3 :(得分:1)

如果您可以修改DoWork操作,请将其定义为OneWay,以便立即返回。如果DoWork是Web服务,则将返回HTTP代码202。