您的位置:首页 > 其它

自学WCF理论知识

2016-03-15 12:15 267 查看
1.理论知识

WCF中,契约可分为

1.1 用于定义服务操作的服务WCF契约:Service Contract

这种级别的契约又包括两种:ServiceContract和OperationContract

ServiceContract用于类或者结构上,用于WCF此类或者结构能被远程调用

OperationContract 用于类中的方法(Method)上,用于指示WCF该方法可被远程调用。

1.11 ServiceContract属性值可以设置

Name:给契约定义一个名称,而不是使用接口或是类的类型名,在客户端添加服务引用时用到

Namespace:命名空间

CallbackContract:将另一个服务契约定义为回调契约,使得客服端可以接收服务端的异步消息。

ProtectionLevel:控制契约中发送消息的保护模式是否需要被签名和加密。该属性为System.Net.Security.ProtectionLevel枚举类型。

SessioMode:确定会话是否为公开服务契约的端点所支持。

1.12 ConfigurationName:服务的配置名称。

OperationContract属性值设置

Name:定义一个操作名称,而不是使用方法名称、

Action:该操作消息的动作标题

ReplyAction:响应该操作消息的动作标题

IsOneWay:设置该操作是否单向和没有回复,如果操作是单向的,将不支持ReplyAction。

ProtectionLevel:允许你控制特定的操作消息是否被保护,操作中的ProtectionLevel属性将覆盖服务契约中的ProtectionLevel。该属性为System.Net.Security.ProtectionLevel枚举类型。

IsInitiating:操作是否可以用来初始化会话。

IsTerminating:操作是否中止一个会话。

AsyncPattern:将服务操作定义为异步实现模式。

1.2 用于自定义结构的数据Wcf契约:Data Contract

数据契约也可分为两种:DataContract和DataMember用于类或者结构上,指示 WCF此类或者结构能够被序列化并传输,而DataMember只能用在类或者结构的属性(Property)或者字段(Field)上,指示WCF该属性或者字段能够被序列化传输。

使用数据契约必须引用System.Runtime.Serialization命名空间,在类型上使用DataContractAttribute可以创建数据契约,类型中的成员使用DataMember标记。代码如下:



1.21 DataContract属性值

IsReferece:bool类型,表示进行序列化的时候是否保持对象现有的引用结构

Name:名称。

Namespace:命名空间。

1.22 DataMember

EmitDefaultValue:表明在数据成员的值等于默认值的情况下,是否还须要将其序列化到最终的XML中,默认值为true,表示默认值会参与序列化。

IsRequired:bool类型,表明属性成员是否是必须的成员,默认值为false。

Name:数据成员的别名。

Order:相应的数据成员在最终序列化的XML中出现的位置,默认是按字母顺序排列的。

1.3 用于自定义错误异常的WCF契约:Fault Contract

FaultContract用于自定义错误异常的处理方式,默认情况下,当服务端抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息,此时,我们可以自定义异常消息的格式,将我们关心的消息放到错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。

IService1.cs中代码:

[OperationContract]  //定义为操作契约
[FaultContract(typeof(Exception))]   //定义为错误契约
int sum(int i,int j);


Service1.svc中代码:

//实现接口层中写入的方法签名
public int sum(int i, int j)
{
if (j == 0)
{
Exception er = new Exception();
throw new FaultException<Exception>(er, "除数不能为0");
}
else
{
return i / j;
}
}


Web应用程序中的代码:

protected void Page_Load(object sender, EventArgs e)
{
try
{
Service1Client Server1 = new Service1Client();
Response.Write(Server1.sum(0,0));  //这里设置的为能引发异常的参数
}
catch (Exception ex)
{
Response.Write(ex.Message);  //输出异常信息,输出“除数不能为零”
}
}


1.4用于控制消息格式的消息WCF契约:Message Contract

简单的说,它能自定义消息格式,包括消息头,消息体,还能指示是否对消息内容进行加密和签名。

使用消息契约必须引用System.ServiceModel命名空间,消息契约和数据契约一样都是定义在数据类型上。和数据契约不同的是消息契约更多的是关注数据成员在SOAP消息中的表示。定义一个消息契约需要用到MessageContract特性,另外还涉及到MessageHeader和MessageBodyMember这两个特性,MessageContractAttribute特性标记在类型上,MessageHeader和MessageBodyMember特性标记在数据成员上。



2.host app.config 的简单配置多个调用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: