笔记

22 篇文章 0 订阅

http://foreversky12.iteye.com/blog/2308191


1、如果是通过添加服务引用方式生产客户端代理的话,则需要在服务端app.config文件中添加元数据终结点,用以向互联网公开服务端元数据,这样客户端就可以使用添加服务引用的方式根据服务端公开的元数据生成客户端代理。

2、如果是通过手动写客户端代理(用ClientBase<IService1>实现),则可以不需要在服务端app.config文件中有元数据终结点,但是得在客户端app.config 文件中添加对应的客户端终结点((ABC(Address、Binding、Contract)要与服务端通讯的终结点一致(元数据终结点是公开服务端元数据的终结点,不是用来通讯的。个人理解))



契约(Contract)的会话模式([ServiceContract(SessionMode) ])有3种:allowed,NotAllowed,Required,分别表示允许建立会话,不允许建立会话,必须建立会话。而能不能建立会话是由绑定类型(Binding)决定的,因为有的绑定支持会话,有的不支持会话,并且还得在绑定配置行为中设置下。



终结点(EndPoint) 包括 地址(Address):localhost:12345//... 、绑定(Binding):BasicHttpBinding、契约(contract):IService



WCF中定义3种消息交换模式: 1. Request/Reply; 2. One-Way; 3. Duplex。  
Request/Reply 是缺省模式,即同步调用。在调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型。 
One-Way 这种方式在调用方法后会立即返回。需要注意的是 One-Way 不能用在非void,或者包含 out/ref 参数的方法上,会导致抛出 InvalidOperationException 异常。 
Duplex 又称为双工通信,实现起来比前两种来说要稍微复杂些。(1) ServiceContract 中指定 Callback类型; (2) 对于回调操作,指定[OperationContract(IsOneWay=true)] ; (3) 服务中通过 OperationContext.Current.GetCallbackChannel 来获得客户端 Callback 实例。 

(4)客户端中使用下面代码传递客户端实现的回调类:

InstanceContext _instanceContext = new InstanceContext(new CCallbackHander());
ServiceReference1.Service1Client _client = new ServiceReference1.Service1Client(_instanceContext);

public class CCallbackHander : ServiceReference1.IService1Callback
    {。。。

请求--应答 模式:客户端调用操作方法后必须等待服务端操作完成并返回响应后才会继续执行,即使请求的是void类型的操作方法也如此。

单向 模式:客户端只负责请求,然后不管服务端有没有操作完成,也不管有没有返回响应,继续执行。

双工 模式:客户端既能调用服务端操作方法,服务端也可以调用客户端。CallbackContract

ICalulatorCallback  _callback=OperationContext. Current. GetCallbackChannel< ICalculatorCallback>() ;



将服务托管在IIS中最大的好处是,当他接受到客户端的第一个请求的时候会自动的启动托管进程。它使用了IIS的众多特性,比如进程回收,空闲关闭,进程健康状态监视和消息驱动。而最大的不足在于,它只支持HTTP协议。


WAS是一种新的处理激活机制,和IIS7.0一起的(ship with IIS7.0)。另外除了可以基于HTTP,WCF还可以使用WAS提供基于其他协议的消息激活,比如TCP和命名管道。 


ServiceHost是托管WCF服务的核心类。手动写客户端代理类时可以继承ClientBase<IService>


Step 8: 服务一旦被托管启动,我们就可以创建为客户端服务的带来类了,创建代理有不同的方法 
    1.使用SvcUtil.exe创建代理以及相关联的配置文件 
    2.将服务引用添加到客户端程序 
    3.实现基类ClientBase<T> 
在这些方法中,实现ClientBase<T>是最好的实践。假如你使用另外两个,当服务实现发生变化的时候,你需要每次都创建代理类。但是使用ClientBase<T>就不需要。它会在启动的时候创建代理,所以它可以处理任何变化。


单调服务(Pcr-Call Service)会为每次的客户端请求分配(销毁)一个新的服务实例。

会话服务(Sessionful Service)则为每次客户端连接分配一个服务实例。

单例服务(Singleton Service),所有的客户端会为所有的连接和激活对象共享一个相同的服务实例。



knownType()







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值