繁体   English   中英

WCF服务事件问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM