EndPoint的组成:
Address、Binding、Contract、Behavior
双向通讯:
单向属性:
OperationContract的IsOneWay属性
两种支持双工通信的绑定:
netTcpBinding、wsDualHttpBinding
回调契约:
Callback Contract
非单向的并发处理:
ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant或者ConcurrencyMode.Multiple)
Serialization(序列化):
Serializer:
DataContractSerializer(WCF默认的序列化器)
XMLSerializer(.NET WEBSERVICE默认的序列化器)
NetDataContractSerializer(和DataContractSerializer区别不大)
Encoding:
Binary:性能好
Text:互操作性好
MTOM:适合传输大数据量
对重载(overloading)的支持:
通过OperationContract的Name属性为重载的方法指定一个别名来实现对重载的支持。
Session:
- Session的创建和结束都依赖于客户端的调用。
- 可以通过System.ServiceModel. OperationContractAttribute的IsInitiating和IsTerminating参数来指定初始化和终止Session的Operation。
- WCF保证处于某个Session中传递的Message按照他发送的次序被接收。
- WCF并没有为Session的支持而保存相关的状态数据。
- Session的表现体现在以下两种方式:
- Session的周期与Proxy的周期绑定,这种方式体现为默认的Session支持。
- Session的周期绑定到开始和终止Session的方法调用之间的时间段内,这种方式体现在我们在定义Operation Contract时通过IsInitiating和IsTerminating显式指定开始和终止Session的Operatoin。
- Instance Context Mode决定着不同的Session表现。
- 在WCF中支持以下三种不同级别的Instance Context Mode:
- PerCall:WCF为每个Serivce调用创建 一个Service Instance,调用完成后回收该Instance。这种方式和Remoting中的SingleCall相似。
- PerSession:在Session期间的所有Service调用绑定到某一个Service Instance,Session被终止后,Service Instance被回收。所以在Session结束后使用同一个Proxy进行调用,会抛出Exception。这种方式和Remoting中的CAO相似,这也是WCF默认的Instance Context Mode。
- Singleton:这种方式和Remoting的Singelton相似。不过它的激活方式又有点特别。当为对应的Service type进行Host的时候,与之对应的Service Instance就被创建出来,此后所有的Service调用都被forward到该Instance。
- BasicHttpBinding不支持Session。
Exception Handling:
- 使用FaultContract来定义异常契约。
- [FaultContract(typeof(MathError))]
- double Divide(double x, double y);
- MathError error = new MathError("Divide", "Divided by zero");
- throw new FaultException<MathError>(error,new FaultReason("Parameters passed are not valid"),new FaultCode("sender"));