WCF netNamedPipeBinding和用于其通信的共享内存
本文关键字:共享 内存 通信 netNamedPipeBinding 用于 WCF | 更新日期: 2023-09-27 18:20:54
人们说,当他们希望两个wcf服务相互交互并共享数据时,就会在wcf中使用netNamedPipeBinding。我在谷歌上搜索了很多wcf-netNamedPipeBinding的示例,但没有一个使用netNamedPapeBinding共享内存用于通信目的。因此,我的请求是,如果有人知道wcf-netNamedPipeBinding上的任何文章,这些文章指导我如何使用netNamedPapeBinding协议在两个wcf服务之间共享内存,那么请将我重定向到该文章。
我想在同一台电脑上运行两个wcf服务,看看两个wcf服务如何共享同一内存并相互交互。什么时候它会成功,那么我想在两台不同的电脑上运行两个wcf服务来共享内存?寻求帮助。感谢
使用共享内存不需要做任何特殊的事情。WCF netNamedPipeBinding
内部使用memory mapped files
在同一台计算机上运行的两个进程之间进行通信,这是运行在同一计算机上的两个程序通过WCF进行通信的最快方式。
请参阅本文。
然而,同时也是一个限制,因为它使用shared memory object (memory mapped file)
,所以通信双方都必须在same computer
上运行。
要使用WCF在两台计算机之间进行通信,必须使用其他绑定:
C#-WCF-进程间通信
基本上,它的使用与其他WCF通信相同,据我所知,内存实际上并不是共享的,但一个进程可以将内容获取到内存并将其传递给另一个进程。不同之处在于如何定义端点。
这是一个服务器端点定义:
<system.serviceModel>
<services>
<service name="aaa.bbb">
<endpoint address="net.pipe://localhost/lalala" binding="netNamedPipeBinding" contract="aaa.Ibbb">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/aaa/Service1/" />
</baseAddresses>
</host>
</service>
</services>
这是客户端:
NetNamedPipeBinding nnpb = new NetNamedPipeBinding();
nnpb.MaxReceivedMessageSize = 65536000;
ChannelFactory<aaa.Ibbb> Factory =
new ChannelFactory<aaa.Ibbb>(nnpb, new EndpointAddress("net.pipe://localhost/lalala"));
aaa.Ibbb proxy = Factory.CreateChannel();
var a = proxy.DoSomething();
使用这些关键词中的任何一个,你可能会找到一些教程。