2、客户端不允许直接访问服务,即不允许客户端直接访问本地机器内存中的服务,而是通过代理将调用转发给服务,代理公开的操作与服务相同,同时还增加了一些管理代理的方法。
3、过去,诸如DCom或者.net Remoting等分布式计算机技术,不管远程还是本地,都期望为用户提供相同的编程模型,本地调用时,客户端直接引用,远程调用时,使用代理。这样导致远程调用原比本地调用复杂。复杂度体现在生命周期管理,可靠性,状态管理,可伸缩性,以及安全性。WCF要求客户端保持一致的编程模式,既即是是本地调用也要使用代理完成,要求相同的配置和托管方式。
3.1 服务与地址,契约以及绑定有关,
地址定义了服务的位置,绑定定义了服务的通讯方式,契约定义了服务的内容。
4、WCF地址通常采用如下模式
基地址(传输协议://机器名或者域名:端口号)/可选的URL
http://localhost:8001/myservice
net.tcp://localhost/myservice
如果不设置端口,则为默认端口,http为80,tcp为808
两个tcp可以共享一个端口
net.tcp://localhost:8002/service1
net.tcp://localhost:8002/service2
5、契约分为4类,
服务契约,相当于函数(由于是接口,所有和访问类型无关,都是public类型的)
数据契约,相当于实体
异常契约,错误处理
消息契约,允许服务之间之间交互,不通过代理,很少使用
6、ServiceContract一般作用到接口上,提供类来实现,但是ServiceContranct也可以作用到类上,但是一般不这么做,这样不利于在不同的场合使用契约
7、一个类可以实现多个接口,来实现多个契约
8、可以使用ServiceContract类型的NameSpace属性类设置命名空间,来降低类型的冲突记录
[ServiceContract(namespace="myNameSpace")] 默认的命名空间为http://tempuri.org
默认情况下契约名称就是接口名,但是也可以起别名
[serviceContract(name="IMyContract")]