(2) 第二章 WCF服务与数据契约 服务契约详解(三)- [ServiceContract]特性
本章节主要目的:了解[ServiceContract]特性
如前几章的进度,相信已经可以自己编写服务契约以及如何在客户端调用配置好的服务了。
本片主要讲解一下SerivceContract中的几个重要特性。
1.先看一下SerivceContract特性的成员列表
参数 说明
CallbackContract 当契约是双工时,读取或设置回调契约的类型
ConfigurationName 获取或设置服务在应用程序配置文件中的名称
HasProtectionLevel 读取一个值,表示此成员是否有一个保护级别
Name 获取或设置WSDL文档中<portType>元素的名称
Namespace 获取或设置WSDL文档中<portType>元素的名称空间
ProtectionLevel 设置对契约的绑定是否支持ProtectionLevel属性的值
SessionMode 获取或设置会话是否允许,以及是否得到了请求
好了,ServiceContract特性是指定附加上的类或接口做为服务的契约。显示的使接口定义为CLR接口,并且使它能够执行WCF的操作,且每一个[ServiceContract]属性都会映射到等价的WDL portType声明中。
CallbackContract
此参数用于获取或设置当前契约在双工模式通信时回调的契约。它包涵了回调契约的类型。示例代码:
namespace CallbackContractDemo { [ServiceContract(CallbackContract = typeof(IDemoCallbackContract))] public interface IDemo { [OperationContract] int Add(int a, int b); } public interface IDemoCallbackContract { int GetResult(int c); } }
大家可以看到CallbackContract = typeof(IDemoCallbackContract),那IDemoCallbackContract的内容由调用的客户端去实现。
ConfigurationName
ConfigurationName用于获取或设置配置文件中的元素名称。示例代码:
[ServiceContract(ConfigurationName="Service")] public interface IDemo { [OperationContract] int Add(int a, int b); }
下面是配置文件的内容
<configuration> <system.servicemodel> <services> <service name="Demo"> </service> </services> </system.servicemodel> </configuration>
HasProtectionLevel
这个就不多说了,就读取一个值,表示此成员是否有一个保护级别。
Name
Name参数是用来设置或获得在WSDL中<portType>元素的名称。
当然也可以用于不想将函数名称以实名暴露在外面。
Namespace
Namespace参数用来设置或获取WSDL中<portType>元素的命名空间。默认为http://tempuri.org
使用命名空间可以防止接口或类的命名冲突。当然也可以用于不想将函数名称以实名暴露在外面。
ProtectionLevel
设定保护绑定的要求,每个端点的加密以及数字签名等。
ProtectionLevel的参数的值来自System.Net.SecurityLevel.ProtectionLevel枚举,也可以用下面的值:
EncryptAndSign:签名和加密来保证传输数据的机密性和完成性。
None:只验证。
Sign:签名能够保证传输数据的完整性,不进行加密。
SessionMode
此属性指定会话的类型。
也是一个枚举SessionMode。
Allowed:如果进入的连接支持可靠会话,则契约支持可靠会话。
NotAllowed:指定的契约不支持可靠的会话。
Required:指定需要可靠会话的契约。
要考虑的可靠会话的情况:
- 希望提供HTTP会话
- 在端点之间有间断连接
- 存在代理媒介或传输桥
- 在端点之间有SOAP媒介
由于时间问题 待续中....见谅