Wcf客户端和长期运营

本文关键字:客户端 Wcf | 更新日期: 2023-09-27 18:18:10

大家好!

我有一个简单的wcf服务和桌面客户端,它使用了一些功能。但是我的客户异常地错误,我的wcf操作太长了。 一些代码:

 client=new MyWcfServiceClient();
 client.DoWork(param1,param2..etc);
我不需要在DoWork工作的时候等待。我需要执行这个方法,然后继续。这就像发送命令去做一些工作,我不需要立即得到结果。

怎么做?谢谢你!

注:服务器端代码如下:

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

P.P.S.

Wcf客户端和长期运营

在服务中,将您的逻辑从: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
}

你可以这样做:

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

使用。net 4.5,您可以在向应用程序添加服务引用的同时创建基于任务的代理。这可以通过单击Add Service Reference对话框中的Advanced按钮来完成。更多信息请看这里

一旦完成,你将得到以下内容:

使用这个新的代理,你可以做这样的事情:

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

如果您可以修改您的DoWork操作,将其定义为单向,因此它将立即返回。如果DoWork是web服务,则返回HTTP代码202。