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和用于其通信的共享内存

使用共享内存不需要做任何特殊的事情。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();

使用这些关键词中的任何一个,你可能会找到一些教程。