第1章 wcf简介

soa体现的是一种对关注点进行分解的思想,与技术无关

soa的基本思想:

a.服务自治  独立部署,不依赖其他

b.依赖于开放的标准  采用xml,xsd,及wsdl作为服务描述的“语言”

c.跨平台  java平台下的应用能够调用.net平台暴露出来的wcf服务

d.可组合的服务 原子服务,聚合型服务

e.服务的复用  场景无关性

f.松耦合  通过契约

-----------------------------------------------------------------------------------------------------

简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序

WSDL

Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言
WS-*规范
 ------------------------------------------------------------------------------------------------------
com/dcom(组件)(远程调用),
.net remoting(不能跨平台),
web服务+wse,
msmq(支持离线,)
 

第2章 终结点地址与wcf寻址

终结点(ABC)

URI统一资源标识

http:超文本传输协议(80)/https(443):超文本传输协议,1.请求回复消息传输方式,2.无状态,3.无连接

net.tcp(808):传输控制协议,1.连接的(3次握手原则),2.有状态,3.支持全双工通信,4支持可靠通信

net.pipe:命名管道,同一机器的跨进程通信

net.msmq:消息队列  1.公共消息队列 2.私有消息队列 private表示私有

-------------------------------------------------------------------

ServiceEndpoint,EndpointAddress,AddServiceEndpoint,

ClientBase<TChannel>,ChannelFactory<TChannel>,

地址报头,AddressHeader,

实例演示,通过地址报头进行授权(S201,S202,S203)

     <headers>
<sn xmlns="http://www.artech.com/">{DDA095DA-93CA-49EF-BE01-EF5B47179FD0}</sn>
</headers>

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]

消息筛选策略(报头)(Exact,Prefix,Any)

精确匹配,基于前缀匹配,匹配任何地址

端口共享:

http.sys,专门用于http请求的监听(内核模式)

net.tcp ,port sharing service windows服务实现的(用户模式)

逻辑地址与物理地址:ListenUri,ListenUriMode (Explicit,Unique)

行为:服务行为,契约行为,终结点行为,操作行为

实例演示(通过tcpTarce进行消息的路由S205.206)

请求监听与消息分发:6种消息筛选器

第3章 绑定与信道栈

信道栈:传输信道,消息编码信道,协议信道

实例演示(直接通过绑定进行消息通信 上s301)

CommunicationObject,

DefaultCommunicationTimeouts,

IChannel,

ChannelBase

mep消息交换模式:

1.请求回复,

2.数据报或者单工模式,one-way

3.双工模式,回调  a.请求过程中的回调 b.订阅-发布

状态保持的角度,信道分为  1.数据报信道,2.会话信道(保持一个客户端对象,具有相同的生命周期)

实例演示:(自定义信道s302)

信道监听器,(自定义信道监听器s302)

信道工厂,(自定义信道工厂s302)

绑定元素:(自定义绑定元素s302)

绑定:绑定元素的有序集合(自定义绑定s302,s303)

系统绑定:自定义绑定

NetTcpBinding,NetNamedPipeBinding和NetMsmqBinding,tcp,命名管道,消息队列

WSHttpBinding,WS2007HttpBinding实现跨平台

WSDualHttpBinding,实现基于http的双向通信

BasicHttpBinding

绑定配置:自定义绑定元素配置

第4章 服务契约

元数据与中间代码的关系和服务契约与服务实现的关系类似

wcf契约:1.对服务操作的描述:服务契约;2.对数据的描述:数据契约,消息契约,错误契约

------------------------------------------------------------------------------------------------

ServiceContractAttribute    (ServiceContract,接口或类,推荐以接口实现)

主要3个属性:

Name,(一个确定的名称)

Namespace,(公司名称或项目名称)

ConfigurationName,(对应配置文件中ending contract="")

其他属性:sessionmode(采用何种会话模式),HasProtectionLevel,ProtectionLevel(消息保护级别),CallbackContract(双向通信回调)

------------------------------------------------------------------------------------------------

OperationContractAttribute    (OperationContract,操作方法)

Name:(默认是操作方法名)   同一个契约中不能存在两个名称相同的操作

Action与ReplyAction:(消息交换模式和请求、回复消息的格式)

Action的2个主要作用:消息筛选和操作选择。

为终结点指定契约,在同一个服务契约下 Action是唯一的

未匹配消息处理器:Action='*',只能有一个

其他属性:AsyncPattern(异步模式),IsInitiating/IsTerminating(初始化,终结会话),IsOneWay(单向消息交换模式)

-----------------------------------------------------------------------------------------------

服务契约的继承,(操作可以继承)

契约描述:contractDescription,operationDescription,messageDescript

实例:通过messageDescript分析请求、回复消息结构

---------------------------------------------------------------------------------------------------

消息交换模式与服务操作:

1.请求回复模式(默认)

2.单向模式 (不允许有返回值)

3.双工模式

实例:通过双工通信实现回调(s403)

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]

--------------------------------------------------------------------------------------------------

多线程与异步操作

1.异步信道调用

2.单向消息交换

3.异步服务实现:

a.通过beginxxx/endxxx进行异步服务调用

b.通过回调的方式进行异步调用

c.通过事件注册的方式进行异步服务调用  [OperationContract(AsyncPattern = true)]

----------------------------------------------------------------------------------------------

操作的选择与执行 dispatchoperation,clientoperation

第5章 序列化与数据契约

XmlSerializer

DataContractAttribute  DataContract,(只能用于枚举,类,结构体,不能用于接口)

DataMemberAttribute DataMember(字段和属性)

DataContractSerializer  MaxItemsInObjectGraph默认值65536

如何保持对象现有的引用结构 preserveReference = true

已知类型:不推荐在服务操作中以接口类型作为参数 knownTypeAttribute,serviceKnownTypeAttribute

泛型数据契约与集合数据契约:

数据契约集合:IEnumerable,Array,IList<T>,都定义成数组  字典数据契约

等效数据契约:数据成员的添加和删除,缺失的数据成员采用默认值 实现IExtensibleDataObject

数据契约代理:DataContract Surrogate

序列化在WCF框架中的实现:

消息格式化器,实例演示:通过自定义消息格式化器压缩信息(s521)

第6章 消息,消息契约与消息编码

wcf的应用领域:1.SOAP企业级应用  2.web应用rest服务

Message.CreateMessage

消息的基本操作:读,写,拷贝,关闭

消息报头和消息属性

实例演示(通过消息报头和消息属性实现上下文信息的传播s612)

消息契约:MessageContract

上传文件:将传输文件的内容流作为主体,将属性作为报头传递

消息编码器:MessageEncoder

第7章 服务寄宿

wcf的四大行为:服务行为,终结点行为,契约行为,操作行为

IIS与ASP.NET架构设计

Windows服务寄宿

第8章 客户端

服务代理

第9章 实例管理与会话

单调模式,单例模式,会话模式

第10章 REST服务

软件架构风格:SOAP,XML-RPC,REST(表征状态转移)

面向资源架构(ROA):一切数据都是资源,所有的资源均可被唯一标识,采用统一而简单的接口,基于表征的通信,无状态服务调用

 [ServiceContract]
public interface IEmployees
{
[WebGet(UriTemplate = "all")]
IEnumerable<Employee> GetAll(); [WebGet(UriTemplate = "{id}")]
Employee Get(string id); [WebInvoke(UriTemplate = "/", Method = "POST")]
void Create(Employee employee); [WebInvoke(UriTemplate = "/", Method = "PUT")]
void Update(Employee employee); [WebInvoke(UriTemplate = "{id}", Method = "DELETE")]
void Delete(string id);
}

WebHttpBinding,WebGetAttribute,WebInvokeAttribute,WebHttpBehavior,WebServiceHost,WebServiceHostFactory,WebOperationContext,WebFaultException

URI模板,消息格式化,输出缓存与条件获取更新

第11章 wcf实例研究

下册

第1章 异常处理

servicedebugbehavior 应用于调试

  <behaviors>
<serviceBehaviors>
<behavior name="serviceDebuBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<service name="Artech.WcfServices.Service.CalculatorService" behaviorConfiguration="serviceDebuBehavior">

一般是自定义错误信息:

1.通过FaultException直接指定错误信息

   public class CalculatorService : ICalculator
{
public int Divide(int x, int y)
{
if ( == y)
{
throw new FaultException("被除数y不能为零!");
}
return x / y; }
}
  using (calculator as IDisposable)
                {
                    try
                    {
                        int result = calculator.Divide(, );
                    }
                    catch(FaultException ex)
                    {
                        Console.WriteLine(ex.Message);
                        (calculator as ICommunicationObject).Abort();
                    }
                }

2.通过FaultException<TDetail> 采用自定义类型封装错误

3.错误契约

2和3相结合,(S104)

  public interface ICalculator
{
[OperationContract]
[FaultContract(typeof(CalculationError))]
int Divide(int x, int y);
}
  [DataContract(Namespace = "http://www.artech.com/")]
public class CalculationError
{
public CalculationError(string operation, string message)
{
this.Operation = operation;
this.Message = message;
}
[DataMember]
public string Operation { get; set; }
[DataMember]
public string Message { get; set; }
}
  public class CalculatorService : ICalculator
{
public int Divide(int x, int y)
{
if ( == y)
{
var error = new CalculationError("Divide", "被除数y不能为零!");
throw new FaultException<CalculationError>(error, error.Message);
}
return x / y;
}
}
   try
{
int result = calculator.Divide(, );
}
catch (FaultException<CalculationError> ex)
{
Console.WriteLine("运算错误");
Console.WriteLine("运算操作:{0}", ex.Detail.Operation);
Console.WriteLine("错误消息: {0}", ex.Detail.Message);
(calculator as ICommunicationObject).Abort();
}

第2章 元数据

1.XSD 2.WSDL 3.WS-Policy

第3章 事务

事务的特点:1.原子性 2.一致性 3.隔离性 4.持久性

1.SQL中的事务处理

2.ADO.NET事务控制

分布式事务:System.Transactions事务

TransactionScope事务

1.通过服务契约决定事务流转的策略

[TransactionFlow(TransactionFlowOption.Allowed)]

2.通过绑定实施事务的流转

3.通过服务行为控制事务

实例演示:创建事务型服务(s301)

    using (TransactionScope transactionScope = new TransactionScope())
{
ServiceInvoker.Invoke<IWithdrawService>(proxy => proxy.Withdraw(fromAccountId, amount), "withdrawservice");
ServiceInvoker.Invoke<IDepositService>(proxy => proxy.Deposit(toAccountId, amount), "depositservice");
transactionScope.Complete();
}

第4章 并发与限流

1.通过ServiceBehaviorAttribute特性定义并发模式

    // 摘要:
// 指定服务类是支持单线程还是多线程操作模式。
public enum ConcurrencyMode
{
// 摘要:
// 服务实例是单线程的,且不接受可重入调用。如果 System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode
// 属性为 System.ServiceModel.InstanceContextMode.Single,且其他消息在实例处理调用的同时到达,则这些消息必须等待,直到服务可用或消息超时为止。
Single = ,
//
// 摘要:
// 服务实例是单线程的,且接受可重入调用。可重入服务接受在调用其他服务的同时进行调用;因此在调出之前,您需要负责让对象的状态一致,而在调出之后,必须确认本地操作数据有效。请注意,只有通过
// 通道调用其他服务,才能解除服务实例锁定。在此情况下,已调用的服务可以通过回调重入第一个服务。如果第一个服务不可重入,则该调用顺序会导致死锁。有关详细信息,请参见
// System.ServiceModel.ServiceBehaviorAttribute.ConcurrencyMode。
Reentrant = ,
//
// 摘要:
// 服务实例是多线程的。无同步保证。因为其他线程可以随时更改服务对象,所以必须始终处理同步与状态一致性。
Multiple = ,
}

2.回调(callback)中的并发CallbackBehaviorAttribute

3.事务行为与并发 (默认模式是 并发模式single,才有效)

1.单调(percall)实例上下文模式

  [ServiceBehavior(UseSynchronizationContext = false,
InstanceContextMode = InstanceContextMode.PerCall)]
public class CalculatorService : ICalculator
{
public double Add(double x, double y)
{
EventMonitor.Send(EventType.StartExecute);
Thread.Sleep();
double result = x + y;
EventMonitor.Send(EventType.EndExecute);
return result;
}
}

相同客户端: (proxy as ICommunicationObject).Open();

2.会话(persession)实例上下文模式

3.单例(single)实例上下文模式

----------------------------------------------------------------------------------------

同步上下文与线程亲和性

synchronizationContext

流量限制:

1.通过编程的方式设置最大并发值

2.通过配置的方式设置最大并发值

第5章 可靠会话

  <reliableSession ordered="true"/>

第6章 队列服务

支持离线

第7章 传输安全

1.Transport安全模式

ssl,https  优缺点:高性能,点对点,适合intranet

2.Message安全模式

与协议无关,端对端,互操作性,跨平台

3.混合安全模式

---------------------------------------------------------------------------------

认证:

1.用户名、密码认证:windows认证,asp.net的成员资格membership,自定义逻辑认证

windows两种不同的认证协议:

1.NTLM:

2.kerberos:

2.数字证书认证

服务认证:

创建基于tls/ssl的服务:(s701)

<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="transportTcpBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="Artech.WcfServices.Service.CalculatorService"
behaviorConfiguration="serviceCertificateBehavior">
<endpoint address="net.tcp://Jinnan-PC/calculatorservice"
binding="netTcpBinding"
bindingConfiguration="transportTcpBinding"
contract="Artech.WcfServices.Service.Interface.ICalculator" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceCertificateBehavior">
<serviceCredentials>
<serviceCertificate storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName"
findValue="Jinnan-PC" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="transportTcpBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint name="calculatorService"
address="net.tcp://jinnan-PC/calculatorservice"
binding="netTcpBinding"
bindingConfiguration="transportTcpBinding"
contract="Artech.WcfServices.Service.Interface.ICalculator"/>
</client>
</system.serviceModel>
</configuration>
  <serviceCertificate>
<authentication certificateValidationMode="None"/>
</serviceCertificate>

https自我寄宿:
https(iis/was寄宿):

客户端认证:

----------------------------------------------------------------------------------

消息保护:

安全会话:

第8章 授权与审核

第9章 扩展

第10章 wcf4.0新特性

WCF技术剖析(卷1)WCF全面解析文摘的更多相关文章

  1. WCF技术剖析之七:如何实现WCF与EnterLib PIAB、Unity之间的集成

    原文:WCF技术剖析之七:如何实现WCF与EnterLib PIAB.Unity之间的集成 在这之前,我写过深入介绍MS EnterLib PIAB的文章(参阅<MS Enterprise Li ...

  2. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

  3. WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)

    原文:WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NE ...

  4. WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制

    原文:WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制 和传统的分布式远程调用一样,WCF的服务调用借助于服务代理(Service ...

  5. WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]

    原文:WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇] 在<上篇>中,我通过使用Delegate的方式解决了服务调用过程中的异常处理以及对服务代理的关闭.对于<WCF技术 ...

  6. WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]

    原文:WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇] 在[第2篇]中,我们深入剖析了单调(PerCall)模式下WCF对服务实例生命周期的控制,现在我们来 ...

  7. WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]

    原文:WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇] 在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常.在服务执行过 ...

  8. WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构

    原文:WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 细算起来,已经有好几个月没有真正的写过文章了.近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析>的写作,一直 ...

  9. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

随机推荐

  1. Mybatis新增mysql时中文乱码

    Mybatis新增mysql时中文乱码 1.设置数据库连接的编码(jdbc.properties) jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:my ...

  2. errno.h的数字对应的字符串错误

    #ifndef _I386_ERRNO_H #define _I386_ERRNO_H #define EPERM 1 /* Operation not permitted */ #define EN ...

  3. pthread中互斥量,锁和条件变量

    互斥量 #include <pthread.h> pthread_mutex_t mutex=PTHREAD_MUTEX_INTIIALIZER; int pthread_mutex_in ...

  4. (原创)AP6212蓝牙模块在am335x控制板上的应用

    主控板wifi模块调通后接着调试蓝牙,经过两周的摸索,终于把蓝牙应用基本建立起来,下面记录下大概流程. 1.硬件管脚设置 static void uart4_init(int evm_id, int ...

  5. CCFlow工作流程起航

    详细可参考SDK请假流程.但请假流程中定义的四个表单只是四个节点表单,首先要依靠访问指向这个请假流程,两种方法进入: 一.是在流程设计中点击运行: 二.先访问 WF\App\Simple\login. ...

  6. 黄聪:Navicat for MySQL的1577错误解决

    今天尝试使用了Windows下的可视化mysql数据库管理工具Navicat,界面清爽,易操作上手,感觉还不错. 不过当连接上mysql后,无论打开任何一个数据库,都会提示:1577 – Cannot ...

  7. 租用游艇(简单区间dp)

    租用游艇 时间限制: 1 Sec  内存限制: 128 MB提交: 1  解决: 1[提交][状态][讨论版][命题人:quanxing] 题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2 ...

  8. 什么是ODBC ?

    ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一 ...

  9. sql多表更新使用别名(小技巧)

    update     A set     A.CityRegionID=B.ParentID,     A.CityName=(select RegionName from Common_Region ...

  10. 让别人能登陆你的mysql

    线上的数据库肯定是不能轻易在开发新功能的时候动的,如果你的数据库跟线上不一样了又没有新数据库的备份,就很麻烦. 当然去动线上数据库,出了什么问题我是不想背锅的. 最稳健的办法!让管理线上数据库的同学, ...