标签:
-》WCF
WCF合并了ASP.NET Web 服务、.NET Remoting、消息队列和Enterprise Servives的功能
WCF本质提供一个跨进程、跨机器以及跨网络的服务调用
WCF不能孤立存在,需要寄宿于一个运行着的进程中—宿主
WCF的典型宿主包括一下四种:
1."Self-Hosting" in a Managed Application(自托管宿主)
2.Managed Windows Services(Windows Services宿主)
3.Internet Information Service(IIS宿主)
4.Windows Process Activation Service(WAS宿主)
internal(访问修饰符):只有在同一个程序集的文件中,内部类型或成员才是可访问的,接口Interface不加修饰符默认是internal,内部成员为public
WCF应用程序和WCF类库区别:
类库只是类的集合,不能单独运行。
WCF服务程序项目是可以直接托管执行的,svc文件属于WCF服务的特定文件扩展名,IIS里有对应的处理程序。
WCF服务程序可以直接IIS里托管即可,WCF类库需要一个程序来引用并托管它
WCF包含四中类型的契约:服务契约、数据契约、消息契约和错误契约
创建WCF项目需要引用System.ServiceModel
WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点(Endpoint),
的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成即为:Endpoint=ABC
SOA:面向服务构架,一种粗粒度、松耦合服务构架,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S
模型、XML/Web Service技术之后的自然延伸
WCF配置文件分为服务端配置与客户端配置。
1.服务端配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrI="http://127.0.0.1:9999/calculatorservice/metadata" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="metadataBehavior" name="Services.CalculatorService">
<endpoint address="http://127.0.0.1:9999/calculatorservice" binding="wsHttpBinding" contract="Contracts.ICalculator" />
</service>
</services>
</system.serviceModel>
</configuration>
1.1<services>配置节点
<service>配置了一个服务,可以有多个<service>也就是可以有多个服务
name属性配置了实现Service Contract的类型名
behaviorConfiguration属性配置了与<behaviors>节点的内容有关
<endpoint>配置节是<service>配置节的主体,包含三部分:address 、binding和contract
binding配置是在<bindings>配置节中完成,因而在<endpoint>中配置bindingConfiguration属性,指向具体的binding配置
例如:
<services>
<service name="BruceZhang.MyService" behaviorConfiguration="MyBehavior">
<endpoint address="" binding="netTcpBinding" contractConfiguration="DuplexBinding" contract="BruceZhang.IHello" />
</service>
</services>
定义多个endpoint,例如:
<services>
<service name="Microsoft.ServiceModel.Sqmples.CalulatorService" behaviorConfiguration="CalculatorServiceBehavior">
<endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator" />
<endpoint address="mex" binding="mexHttpBinding" contract="Microsoft.ServiceModel.Samples.IMetadataExchange" />
</service>
</services>
如果address值为空,那么endpoint的地址就是默认的基地址(Base Address)。例如ICalculator服务的地址就是http://localhost/servicemodelsamples/services.svc
而IMetaExchange服务的地址则为http://localhost/servicemodelsamples/service.svc/mex。这里所谓的基地址可以在<service>中通过配置<host>类定义:
<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddress>
<add baseAddress="http://localhost/ServiceModelSamples/service.svc" />
</baseAddress>
</host>
</service>
1.2<behaviors>配置节
服务端定义一个Service Contract,binding和address信息是客户端必须知道的,否则无法调用该服务。
behavior设置服务的运行时属性
通过自定义behavior插入一些自定义类型
例如:通过指定ServiceMetadataBehavior,可以使WCF服务对外公布Metadata,配置如下:
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpGetUrI="" />
</behavior>
</serviceBehaviors>
</behaviors>
在WCF中,behavior被定义为Attribute,其中,System.ServiceModel.ServiceBehaviorAttribute和System.ServiceModel.OperationBehaviorAttribute
是最常用的behavior。
利用ServiceBehavior与OperationBehavior可以控制服务的如下属性:
1.对象实例的生命周期
2.并发与异步处理
3.配置行为
4.事务行为
5.序列化行为
6.元数据转换
7.会话的生命周期
8.地址过滤以及消息头的处理
9.模拟(Impersonation)
例如,通过ServcieBehavior设置对象实例的生命周期:
<behaviors>
<serviceBehaviors>
<behavior>
<instanceContectMode httpGetEnabled="true" httpGetUrI="" />
</behavior>
</serviceBehaviors>
</behaviors>
WCF常用binding方式:
BasicHttpBinding:用于把WCF服务当做ASMX Web 服务。用于兼容旧的Web ASMX服务。
WSHttpBinding:比BasicHttpBinding更加安全,通常用于non-duplex服务通讯。
WSDualHttpBinding:和WSHttpBinding相比,它支持duplex类型的服务
WSFederationHttpBinding:WS-Federation安全通讯协议
NetTcpBinding:使用TCP协议,用于在局域网内跨机器通信,有几个特点:可靠性、事务支持和安全,优化了WCF到WCF的通信。限制是服务端和客户端都必须使用WCF来实现
NetNamedPipeBinding:使用命名管道进行安全、可靠、高效的单机服务通讯方式
NetMsmqBinding:使用消息队列在不同机器见进行非连接通讯
NetPeerTcpBinding:使用P2P协议在多机器间通讯
MsmqIntegrationBinding:将WCF消息转化为MSMQ消息,使用现有的消息队列系统进行跨机器通讯。如:MSMQ
通过IIS寄宿
基本包含两个步骤:为WCF服务创建.svc文件和创建IIS虚拟目录
1.为WCF服务创建.svc文件
一个asp.net web 服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对应Web 服务的调用。
一个WCF服务也具有一个对应的文本文件,扩展名为.svc,基于IIS的服务的寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部署于IIS站点中,对WCF服务的调用体现在对.svc文件的访问上
.svc文件仅仅包含一个ServiceHost指令(Directive),该指令具有一个必须的Service属性和一些可选的属性。
svc仅仅具有一个包含Service属性(该属性指明了相应的WCF服务的有效类型)的ServiceHost指令。例如例子中的CalculatorService对应的.svc,如下所示
把该.svc放在Services项目的根目录下,并将文件命名为CalculatorService.svc
<%@ServiceHost Service="Services.CalculatorService" %>
2.为WCF服务创建虚拟目录
可以直接把Services项目的根目录映射为IIS虚拟目录,并把该虚拟目录的命名为WcfServices
然后需要为通过IIS寄宿的CalculatorService创建配置文件,只需要在Services的根目录下创建一个Web.config,将WCF相应的配置文件添加到该配置文件即可。
配置文件和自我寄宿配置一致,唯一不同的是在添加的终结点中无须指定地址,因为.svc所在的地址就是服务的地址。,也就是http://127.0.0.1:9999
->WCF 如何通过Remoting实现双向通信
Remoting是NET平台下比较成熟的高效分布式技术。
传统做法:远程调用的方式使用Remoting。在客户端所在的Application Domain,我们通过Proxy(Transparent Proxy)远程的跨Application Domain调用一个方法。
当来自Client端的调用请求通过Proxy到达Server端所在的Application Domain后,Remoting Infrastructure在Server端激活(Activate)相应的远程对象(一个
继承子System.MarvshalByRefobject类对象)——这里仅仅以服务端激活对象(Server Activated Object——SAO),然后再Server端执行相应的操作后把Result传递给Proxy,
并最终到达Client。这是一种Request/Response的调用方式。
.net平台下的Remoting是一种较web service更为成熟的分布式技术,提供了双向通信支持等web service不具备的功能
双向通信实质上是采用的Duplex的MEX。也就是说,Server端在执行操作的时候,可以回调(Callback)Client端的操作(这个操作时在Client端的Application
Domain中执行)
->在WCF中实现双工通信
双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息。基于双工MEP消息交换可以看作是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合。
标签:
原文地址:http://www.cnblogs.com/dongbo19910728/p/4305672.html