我遇到了问题,我不知道如何将对象(通过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。)。 静态对象/队列的所有变通方法都不符合我的要求。
有什么想法吗?
答案 0 :(得分:2)
为了进一步解释John所说的内容,当您的WCF服务配置为Singleton([ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
)时,您可以创建并配置要事先用作单例的实例并将其传递到ServiceHost构造函数中
ClientListenerService svc = new ClientListenerService();
svc.xyz += myListener.xyzHandler;
var wcfServer = new ServiceHost(svc, baseAddresses);
wcfServer.Open();
我还建议downloading the ServiceModelEx library from iDesign,它提供ServiceHost<T>
(由编程WCF服务的作者Juval Lowy编写)我发现使用它更容易
答案 1 :(得分:0)
您的ClientListenerService就像其他任何类一样。它可以像其他任何一样举办公共活动。主机中的其他代码可以像平常一样订阅该事件。