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