WCF的每一个服务都具有一个唯一的地址(Address)。地址包含两个重要元素:服务位置与传输协议,或者是用于服务通信的传输样式。
服务位置包括:目标机器名、站点或网络、通信端口、管道或队列,以及一个可选的特定路径或者URI。URI即统一资源标识,它可以是任意的唯一标识的字符串,例如服务名称或GUID。
WCF1.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
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地址配置为共享一个端口。
HTTP地址
HTTP地址使用http协议进行传输,也可以利用https进行安全传输。HTTP地址通常会被用作对外的基于Internet的服务,并为其指定端口号,例如:
如果没有指定端口号,则默认为80。与TCP地址相似,两个相同宿主的HTTP地址可以共享一个端口,甚至相同的机器。
IPC地址
IPC地址使用net.pipe进行传输,这意味着它将使用Windows的命名管道机制。在WCF中,使用命名管道的服务只能接收来自同一台机器的调用。因此,在使用时必须指定明确的本地机器名或者直接命名为localhost,为管道名提供一个唯一的标识字符串:
net.pipe://localhost/MyPipe
每台机器只能打开一个命名管道,因此,两个命名管道地址在同一台机器上不能共享一个管道名。
MSMQ地址
MSMQ地址使用net.msmq进行传输,即使用了微软消息队列(Microsoft Message Queue,MSMQ)机制。使用时必须为MSMQ地址指定队列名。如果是处理私有队列,则必须指定队列类型,但对于共有队列而言,队列类型可以省略:
net.msmq://localhost/private/MyService
net.msmq://localhost/MyService
对等网地址
对等网地址(Peer Network Address)使用net.p2p进行传输,它使用了Windows的对等网传输机制。如果没有使用解析器(Resolver),我们就必须为对等网地址指定对等网名、唯一的路径以及端口。
转载于:https://blog.51cto.com/fuyang/479447