WCF 第四章 绑定 本机.NET应用程序间的通信

进程间,跨进程,通信就是在同一台机器上的两个独立进程间的通信。进程内,或者在进程中,通信就是在一个进程内两个软件模块的通信。这些通信类型一起组成了我们所称的本机通信。
应用程序域是通过进一步对一个Windows进程拆分并将多个.NET应用程序在安全性和活动范围层次进行隔离的.NET中的架构。这意味着应用程序域是另一个可以被.NET程序跨越的边界。因为这些我们定义了两个额外的名词: 应用程序域间和内部应用程序域。
     应用程序域间或者跨应用程序域。在同一个Windows进程内运行的独立应用程序域是两个.NET应用程序进行通信的场所。也可以在一个单独的设计可以运行多个应用程序域的.NET应用程序中进行通信。
     应用程序域内或者在应用程序域中.  在一个单独的应用程序域中运行的一个单独.NET应用程序也是进行通信的场所。为了便于讨论,把一个应用程序域想象成在一个Windows进程中运行的一个或多个.NET进程。
WCF并不对进程间,进程内,应用程序域内和应用程序域间的通信加以区分。相 反的,WCF提供一个基于命名管道的机上传输信道。命名管道是Windows和Unix环境中标准的进程间通信(IPC)的实现方式。WCF开发组考虑了 一个进程内部的绑定但是最后认为对大多数情况来说它不是必要的。不要去关注这个决定本身,因为在功能性上并没有丢失。在一个命名管道和一个真正的进程内绑 定的差别在于性能。
命名管道绑定的性能比大多数进程内部通信情况都要好很多。如果你发现一个单独的机上信道不是很全面。你可以使用自定义传输信道创建一个自定义绑定。查看后续章节的”创建一个自定义绑定”来获得关于创建一个自定义绑定的更多信息。
netNamedPipeBinding
WCF通过netNamedPipeBinding绑定来支持进程间和进程内 通信场景。netNamedPipeBinding绑定利用一个命名管道传输。由于在WCF中相对其他标准绑定来说它提供了重要的性能增长,所以它非常适 合进程间通信(IPC). 查看接下来的”比较绑定性能和扩展性”章节来获得一个比较快捷的性能比较。
提示  WCF限定netNamedPipeBinding绑定到本机通信!
尽管可以在网络间使用命名管道来通信,WCF却限制了命名管道只能用于本机通 信。这意味着netNamedPipeBinding绑定(任何基于namedPipeTransport绑定元素的绑定)可以用来确定你的服务在网络上 不可访问。这是通过两个架构实现的。首先,网络安全鉴定符(SID:S-1-5-2)无权限访问命名管道。其次,命名管道的名字随时生成并存储在共享内存 中,所以只有本机客户端才可以访问它。
使用netNamedPipeBinding绑定的地址如下格式:
net.pipe://localhost/{service location}
表4.4 显示了netNamedPipeBinding绑定可以配置的绑定属性。netNamedPipeBinding绑定的一个重要属性是maxConnections.这个属性限制了访问终结点的连接数目。默认值是10。为了最大化吞吐量这需要增加。
表4.4 netNamedPipeBinding 绑定属性
 
n/a- 意思是这个设置是一个子节点元素,需要多个属性设置或者除非另外属性被设置否则不会起作用。
下面的配置信息是用来与通过4.4中列表4.2显示的样例的一起工作的。列表4.9 中的配置信息暴露了使用netNamedPipeBinding绑定的StockQuoteService服务。
列表4.9 netNamedPipeBinding宿主配置 
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <services>
            <service behaviorConfiguration="" name="EssentialWCF.StockQuoteService">
                <endpoint binding="netNamedPipeBinding" bindingConfiguration=""
                    contract="EssentialWCF.IStockQuoteService" />
                <host>
                    <baseAddresses>
                        <add baseAddress="net.pipe://localhost/stockquoteservice" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>
列表4.10 显示了使用列表4.9中显示的使用netNamedPipeBinding绑定的服务的客户端。
列表4.10 netNamedPipeBinding客户端配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings />
        <client>
            <endpoint address="net.pipe://localhost/stockquoteservice" binding="netNamedPipeBinding"
                bindingConfiguration="" contract="EssentialWCF.IStockQuoteService"
                name="" />
        </client>
    </system.serviceModel>
</configuration>


===============

转载自

 

posted @ 2011-06-29 10:14  Gavin Liu  阅读(351)  评论(0编辑  收藏  举报

Right people get the right information at the right time.
以技术求生存,以市场求发展;学以至用,开拓创新;达技术之颠峰,至市场之广阔!