地址
WCF的每一个服务都具有一个唯一的地址(Addresses)。地址包含两个重要元素:服务位置与传输协议(Transport Protocol),或者是用于服务通信的传输样式(Transport Schema)。服务位置包括目标机器名、站点或网络、通信端口、管道或队列,以及一个可选的特定路径或者URI。URI即统一资源标识(Universal Resource Identifier),它可以是任意的唯一标识的字符串,例如服务名称或GUID。
WCF 1.0支持下列传输样式:
·HTTP
·TCP
·Peer network(对等网)
·IPC(基于命名管道的内部进程通信)
·MSMQ
地址通常采用如下格式:[基地址]/[可选的URI]
基地址(Base Address)通常的格式如下:[传输协议]://[机器名或域名][:可选端口]
下面是一些地址的示例:
http://localhost:8001/MyService
net.tcp://localhost:8002/MyService
net.pipe://localhost/MyPipe
net.msmq://localhost/private/MyService
net.msmq://localhost/MyService
可以将地址http://localhost:8001读作:“采用HTTP协议访问localhost机器,并在8001端口等待用户的调用。”
如果URI为http://localhost:8001/MyService,则读作:“采用HTTP协议访问localhost机器,MyService服务在8001端口处等待用户的调用。”
TCP地址
TCP地址采用net.tcp协议进行传输,通常它还包括端口号,例如:
net.tcp://localhost:8002/MyService
如果没有指定端口号,则TCP地址的默认端口号为808:
net.tcp://localhost/MyService
两个TCP地址(来自于相同的宿主,具体内容将在本章后面介绍)可以共享一个端口:
net.tcp://localhost:8002/MyService
net.tcp://localhost:8002/MyOtherService
本书广泛地使用了基于TCP协议的地址。
注意:我们可以将不同宿主的TCP地址配置为共享一个端口。
HTTP地址
HTTP地址使用http协议进行传输,也可以利用https进行安全传输。HTTP地址通常会被用作对外的基于Internet的服务,并为其指定端口号,例如:
如果没有指定端口号,则默认为80。与TCP地址相似,两个相同宿主的HTTP地址可以共享一个端口,甚至相同的机器。
本书广泛地使用了基于HTTP协议的地址。
IPC地址
IPC地址使用net.pipe进行传输,这意味着它将使用Windows的命名管道机制。在WCF中,使用命名管道的服务只能接收来自同一台机器的调用。因此,在使用时必须指定明确的本地机器名或者直接命名为localhost,为管道名提供一个唯一的标识字符串:
net.pipe://localhost/MyPipe
每台机器只能打开一个命名管道,因此,两个命名管道地址在同一台机器上不能共享一个管道名。
本书广泛地使用了基于IPC的地址。
MSMQ地址
MSMQ地址使用net.msmq进行传输,即使用了微软消息队列(Microsoft Message Queue,MSMQ)机制。使用时必须为MSMQ地址指定队列名。如果是处理私有队列,则必须指定队列类型,但对于公有队列而言,队列类型可以省略:
net.msmq://localhost/private/MyService
net.msmq://localhost/MyService
本书第9章将专门介绍队列调用。
对等网地址
对等网地址(Peer Network Address) 使用net.p2p进行传输,它使用了Windows的对等网传输机制。如果没有使用解析器(Resolver),我们就必须为对等网地址指定对等网名、唯一的路径以及端口。对等网的使用与配置超出了本书范围,但在本书的后续章节中会简略地介绍对等网。





