您的位置:首页 > 其它

wcf学习日记 2014-7-1

2014-07-02 09:01 169 查看
Wcf的所有的服务都会公开契约,即描述服务功能的基本方式

Wcf的契约有4种

:服务契约——描述客户端能够执行的服务操作

:数据契约——描述与服务交互的数据类型(int,string隐式定义了契约)

:错误契约——描述服务出错如何处理

:消息契约——允许服务可以直接和消息交互

定义和实现服务契约:

[ServiceContract]//将一个CLR接口映射成一个与技术无关的服务契约

interface IMyContract

{

[OperationContract]

string MyMethod(string text);

}

注意:1:ServiceContract与类型限定无关,类型限定属于clr,所以即使定义为私有的,契约任会公开。以便跨边界调用。只用接口和类可以标记为ServiceContract。即使给类或者接口应用了ServiceContract,并不代表这个类里面的所有方法都是契约,所以需要OperationContract标记

2:服务类的约束:避免使用带参构造函数,因为wcf只能使用默认的构造函数,客户端是无法访问类内部的属性、索引、内部成员的。

3:虽然说ServiceContract可以直接应用到类上,但是我们因为避免这个行为,让他应用在接口上方便不能场景下使用契约。

可以为契约定义命名空间:

[ServiceContract(Namespace= "MyNamespace")],意义与.net的命名空间一样,为了名称避免冲突。契约的默认命名空间为http://tempuri.org,默认情况下契约公开的名字就是接口的名字,但是也可以通过name属性修改名称

托管:

Wcf的每个服务都必须托管在windows的进程中,这个进程我们把他叫做宿主进程,wcf没有要求宿主进程又是客户端进程。

宿主可以由iis提供,可以由windows激活服务提供,甚至可以作为应用程序的一部分

Iis托管:使用iis托管服务的优势是客户端在第一次访问时,自动启动服务,同时可以借助iis管理该服务的生命周期。缺点是只能使用http协议。

自托管:开发者自己提供和管理宿主的生命周期,这样的话就要在客户端调用宿主之前启动宿主
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: