人们常说,当他们想要两个工作流框架服务交互并共享数据时,netNamedPipeBinding就被用在了工作流框架中。我在谷歌上搜索,发现了许多wcf的netNamedPipeBinding示例,但它们都没有使用netNamedPipeBinding来共享内存进行通信。所以这是我的请求,如果有人知道任何关于wcf netNamedPipeBinding的文章,这些文章指导我如何使用netNamedPipeBinding协议在两个wcf服务之间共享内存,然后请将我重定向到该文章。
我想在同一台pc上运行两个wcf服务,看看两个wcf服务如何共享相同的内存并相互交互。当它将成功,然后我想运行两个wcf服务在两个不同的pc上共享内存?寻求帮助。谢谢
发布于 2013-07-03 01:10:21
你不需要做任何特殊的事情来使用共享内存。WCF netNamedPipeBinding内部使用memory mapped files在同一台计算机上运行的两个进程之间进行通信-这是运行在同一台计算机上的两个进程通过WCF进行通信的最快方式。
请参阅this文章。
然而,同时也有一个限制,因为它使用shared memory object (memory mapped file),所以通信双方都必须在same computer上运行。
要使用WCF跨两台计算机进行通信,您必须使用其他一些绑定:
发布于 2013-07-03 00:23:02
基本上与其他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();使用这些关键字中的任何一个,您可能会找到一些教程。
https://stackoverflow.com/questions/17429988
复制相似问题