C# 如何让WCF服务在不从服务调用其方法的情况下向客户端发送消息?

C# 如何让WCF服务在不从服务调用其方法的情况下向客户端发送消息?,c#,wcf,backgroundworker,C#,Wcf,Backgroundworker,我是WCF的新手,我现在知道我可以使用WCF服务中的一个方法,它会返回一些值,但我想知道我是否使用了backgroundworker,我想在完成后向客户发送一条消息,如“作业完成”,我该怎么做我应该使用AutoResetEvent并等待backgroundworker完成,然后resetEvent.Set()让主线程上的方法返回消息吗? 我需要该线程不忙,它应该为我从客户端请求的任何其他命令做好准备。有什么想法吗?我已经想好了,如果不调用该方法,我无法从服务返回消息,但是当我将服务行为的属性从C

我是WCF的新手,我现在知道我可以使用WCF服务中的一个方法,它会返回一些值,但我想知道我是否使用了backgroundworker,我想在完成后向客户发送一条消息,如“作业完成”,我该怎么做
我应该使用AutoResetEvent并等待backgroundworker完成,然后
resetEvent.Set()
让主线程上的方法返回消息吗?

我需要该线程不忙,它应该为我从客户端请求的任何其他命令做好准备。有什么想法吗?

我已经想好了,如果不调用该方法,我无法从服务返回消息,但是当我将服务行为的属性从
ConcurrencyMode=ConcurrencyMode.Single
更改为
ConcurrencyMode=ConcurrencyMode.Multiple
时,它变为多线程,结果是:
由于该属性,该方法在新线程中运行,我可以在该线程工作时发送其他请求,当该线程完成时,它会返回消息/结果

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession)]
public class FileManagerService : IFileManager

看看能做这样的事情。或者,您必须签出服务总线之类的东西-您的客户端将请求存放在总线上,服务稍后会处理它,然后在总线上发送另一条消息以指示完成。@marc_s im使用netTcpBinding我必须更改它吗?是-Duplex仅适用于特定绑定,例如,
WSDualHttpBinding
@marc\s我想tcpBinding比http更适合我的winform应用程序,我正在开发一个应该快速可靠的文件资源管理器,嗯,我仍然不太了解其中的差异,你认为我是否有机会或以某种方式保持TCPbinding,并让
backgroundworker
如我在问题中所解释的那样做出回应?如果你坚持使用
netcpbinding
(我认为这是个好主意),那么你基本上有两个选择:(1)只需接受请求/响应模式—调用者将不得不等待服务完成其工作,或者(2)您需要使用基于队列的方法,在这种方法中,您的客户端只需将请求“存放”到队列(MSMQ或其他)中,服务将从队列中获取这些请求,完成它们,然后通过第二个队列发回状态消息。我看不出在这些情况下,背景工作者会给你带来什么好处。