Pet*_*r M 6 wcf named-pipes netnamedpipebinding
本周我一直试图加快命名管道的速度.我试图用它们解决的任务是,我有一个现有的Windows服务,它充当设备驱动程序,将数据从外部设备汇集到数据库中.现在我必须修改这个服务并添加一个可选的用户前端(在同一台机器上,使用一种IPC形式),它可以在设备和数据库之间传递数据时监控数据,并将一些命令发送回服务.
我对IPC的初步想法是命名管道或内存映射文件.到目前为止,我一直在使用WCF教程基本进程间通信来完成命名管道的想法.我的想法是使用一个实现WCF NamedPipe服务的附加线程来设置Windows服务,并将其用作我的驱动程序内部的管道.
我有示例代码工作,但是我无法理解2个问题,我希望有人可以帮助我:
在本教程中,ServiceHost使用typeof(StringReverser)进行实例化,而不是通过引用具体类来实例化.因此,似乎没有服务器与服务本身交互的机制(在host.Open()和host.Close()行之间).是否可以在服务器和实际实现服务的类之间创建链接并传递信息?如果是这样,怎么样?
如果我运行服务器的单个实例然后运行多个客户端实例,则似乎每个客户端都获得服务类的单独实例.我尝试将一些状态信息添加到实现该服务的类中,并且它仅保留在命名管道的实例中.这可能与第一个问题有关,但是无论如何强制命名管道使用实现服务的类的相同实例?
最后,有关MMF与命名管道的任何想法吗?
编辑 - 关于解决方案
根据Tomasr的回答,解决方案在于使用正确的构造函数来提供实现服务的具体单例类(ServiceHost Constructor(Object,Uri [])).我当时没有意识到的是他提到确保服务类是线程安全的.天真地只是更改构造函数导致服务器崩溃,这最终导致我从这个博客条目Instancecontextmode和Concurrencymode了解InstanceContextMode .设置正确的上下文很好地完成了解决方案.
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |