进程间,跨进程,通信就是在同一台机器上的两个独立进程间的通信。进程内,或者在进程中,通信就是在一个进程内两个软件模块的通信。这些通信类型一起组成了我们所称的本机通信。
应用程序域是通过进一步对一个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宿主配置
列表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客户端配置
列表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>