[英]WCF-Service event issue
我有问题,我不知道如何将一个对象(通过WCF接收)转发到另一个线程(例如WinForm)。
我在类ComManager.cs中创建服务:
var wcfServer = new ServiceHost(typeof(ClientListenerService));
wcfServer.Open();
我在ClientListenerService.cs中有这样的服务接口实现:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single ..... )]
public class ClientListenerService : IClient
{
// This is a theoretical approach, as there is no way to forward an event handler to the service here
public event xyz;
public void AlarmTriggered(AlarmTriggeredDto dto)
{
// How do i get the object to some kind of event handler outside of this service here???
// I need sth. like:
xyz.Invoke(dto);
}
}
当调用AlarmTriggered(dto)方法时,我需要将对象转发到另一个线程。 我不知道如何实现这一点,因为我无法找到一种方法将任何参数传递给我的ClientListenerService之后可以使用的servicehost(如eventhandler或sth。)。 静态对象/队列的所有变通方法都不符合我的要求。
有任何想法吗?
为了进一步解释John所说的内容,当您的WCF服务配置为Singleton( [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
)时,您可以创建并配置要事先用作单例的实例并将其传递给您ServiceHost构造函数。
ClientListenerService svc = new ClientListenerService();
svc.xyz += myListener.xyzHandler;
var wcfServer = new ServiceHost(svc, baseAddresses);
wcfServer.Open();
我还建议从iDesign下载ServiceModelEx库,iDesign提供ServiceHost<T>
(由编程WCF服务的作者Juval Lowy 编写 )我发现它更容易使用。
您的ClientListenerService就像其他任何类一样。 它可以像其他任何一样举办公共活动。 主机中的其他代码可以像平常一样订阅该事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.