2

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

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

4

2 回答 2

3

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

这篇文章。

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

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

C# - WCF - 进程间通信

于 2013-07-02T17:10:21.483 回答
0

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

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

于 2013-07-02T16:23:01.807 回答