一步步学习WCF(3):WCF,我在哪儿能找到你?
前面我和WCF(mm)见了个面,基本了解了一下WCF的情况,并和她打了个招呼,发现还是很喜欢她的呀,以后怎么找她呢,哈哈,WCF(mm)给我提供了可以找到它的地址,哈哈,羡慕不? 言归正传,开始学习WCF的地址(Address).
WCF的每一个服务都具有一个唯一的地址(Addresses).地址包括两个重要的元素:服务的位置和传输协议(下次见MM的碰头地点和碰头暗号,有点不恰当)或者用于服务通信的传输样式。服务位置包括目标机器名、站点或网络、通信端口、管道或队列,以及一个可选的特定路径或者URI。URI及统一资源表示,他可以是任意的唯一标示的字符串,例如服务名称或GUID。例如上一步我们简单的WCF实例中的客户端中的:http://localhost:5509/hello.svc
<endpoint address="http://localhost:5509/Hello.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHello" contract="ServiceReference1.IHello" name="BasicHttpBinding_IHello"/>
</client>
Address在WCF中的用System.ServiceModel.EndpointAddress对象来表示的,它的结构如下:
Address的组成部分及其作用:
1.Uri:指示EndPoint的地址,是必须的
2.Identity:能保证地址的唯一性,当Uri一致的时候,可以用Identity来区分EndPoint,可有可无
3.Headers:为地址提供了一些附加信息,用于Soap Message Filter,最后会添加到Soap消息的Header中
4.此外,Address还包括IsAnonymous属性,用于指示终节点是否能匿名访问。
WCF支持的地址的样式有如下:
1.HTTP,
2.TCP,
3.Peer network(对等网),
4.IPC(基于管道的内部进程通信),
5.MSMQ(微软消息队列)
地址通常采用格式如下:
[基地址]/[可选的URI]
基地址的通常格式如下:
[传输协议]://[机器名或域名][:可选端口]
HTTP地址:
HTTP使用HTTP协议进行传输,也可以利用https进行安全传输,http地址通常会被用作对外的的基于Internet的服务,并为其指定端口号,例如:http://localhost:8001 ,如果没有指定端口号,则默认为80端口。两个相同宿主的http地址可以共享一个端口,甚至相同的机器。
TCP地址:
TCP地址采用net.tcp协议进行传输,通常他还包括端口号,例如:net.tcp://localhost:8002/myservice ,如果没有指定端口号,则默认端口号为808:
net.tcp://localhost/myservice,两个TCP地址(来自相同的宿主)可以共享一个端口。
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地址(对等网地址):
使用net.p2p 进行传输,它使用了Windows的对等网传输机制。如果没有使用解析器,我们就必须为对等网地址指定对等网名,唯一的路径以及端口。(很少用到)