【问题标题】:WCF netNamedPipeBinding and shared memory for their communicationWCF netNamedPipeBinding 和共享内存用于他们的通信
【发布时间】:2013-07-02 15:46:09
【问题描述】:

人们说当他们希望两个 wcf 服务相互交互并共享数据时,在 wcf 中使用了 netNamedPipeBinding。我正在搜索谷歌,我发现了许多 wcf netNamedPipeBinding 示例,但没有一个使用 netNamedPipeBinding 来共享内存以进行通信。因此,如果有人知道关于 wcf netNamedPipeBinding 的任何文章,该文章将指导我如何使用 netNamedPipeBinding 协议在它们之间共享两个 wcf 服务的内存,那么我的请求是,请把我重定向到那篇文章。

我想在同一台电脑上运行两个 wcf 服务,看看两个 wcf 服务如何共享相同的内存并相互交互。当它成功时,我想在两台不同的电脑上运行两个 wcf 服务来共享内存?寻求帮助。谢谢

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    您无需执行任何特殊操作即可使用共享内存。 WCF netNamedPipeBinding 在内部使用 memory mapped files 在同一台计算机上运行的两个进程之间进行通信 - 这是同一台计算机上运行的两个进程通过 WCF 进行通信的最快方式。

    参见this 文章。

    但同时也有一个限制,因为它使用shared memory object (memory mapped file),所以通信双方都必须在same computer上运行。

    要使用 WCF 在两台计算机之间进行通信,您必须使用其他一些绑定:

    C# - WCF - inter-process communication

    【讨论】:

      【解决方案2】:

      基本上,其使用与其他 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();
      

      使用这些关键字中的任何一个,您都可以找到一些教程。

      【讨论】:

        猜你喜欢
        • 2016-07-23
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多