WCF研究-中篇

中篇

5.托管于宿主

6.消息模式

7.WCF行为-实例管理和并发控制

8.安全

5.托管于宿主

托管

宿主Host

Ø承载WCF Service运行的环境

自承载方式

系统服务方式

IIS方式

WAS

建立Winform宿主

关键代码

ServiceHost host = new ServiceHost(service Type );

host.Open();

 1  private void button1_Click(object sender, EventArgs e)
 2         {
 3
 4             System.ServiceModel.ServiceHost myhost = new System.ServiceModel.ServiceHost(typeof(WeatherInfoService.WeatherInfoService));
 5
 6             try
 7             {
 8                 myhost.Open();
 9
10                 this.textBox1.AppendText(myhost.State.ToString() + " 已经启动" + DateTime.Now);
11             }
12             catch (Exception)
13             {
14                 this.textBox1.AppendText(" 启动错误" + DateTime.Now);
15             }
16
17
18             System.Threading.Thread.Sleep(5000);
19
20             try
21             {
22                 myhost.Close();
23                 this.textBox1.AppendText(myhost.State.ToString() + " 已经Close" + DateTime.Now);
24             }
25             catch (Exception)
26             {
27                 this.textBox1.AppendText(" 启动错误" + DateTime.Now);
28             }
29         }

宿主代码

6.消息模式

消息模式

Ø 客户端与服务器之间是进行消息通讯的方式

三种主要消息模式

Ø 单向 One Way

Ø 请求/答复Request/Reply

Ø 双工Duplex

消息模式-单向模式

单向模式

Ø One Way Call

Ø 指的是发送端负责把消息发送给对方并且收到本地发出信息的确认消息之后,就完成交互的方式。

特点

Ø 未知:消息是否最终到达服务的终节点

Ø 已知:消息发送成功

Ø 一般只能为返回void 的操作指定单向消息交换

Ø Operation Contract Attribute的IsOneWay 属性需要设置为True,默认为false.

[OperationContract(IsOneWay=true)]

void Method();

操作协定中可以有很多参数标记,如下图:

消息模式-请求/答复模式

请求/答复模式

Ø Request/Reply

Ø 客户端发送一个消息并且接收一个返回消息来完成一次交互

特点

Ø 请求方(客户端应用程序)发出请求以后,一直等待对方(WCF方)答复。

Ø 这是默认的模式

[OperationContract]

void Method();

消息模式-双工模式

双工模式

Ø duplex

Ø 客户端和服务端都可以任意地向对方发送消息,而对方也可以以任意的次序来接收消息。

Ø 服务端 :

1 需要设计用于回调的服务协定,

 1  public interface IChatCallBack
 2     {
 3         [OperationContract(IsOneWay = true)]
 4         void Receive(string name, string msg);
 5
 6         [OperationContract(IsOneWay = true)]
 7         void ReceiveWhisper(string name, string msg);
 8
 9         [OperationContract(IsOneWay = true)]
10         void UserEnter(string name);
11
12         [OperationContract(IsOneWay = true)]
13         void UserLeave(string name);
14
15         [OperationContract(IsOneWay = true)]
16         void LoadUsers(List<string> chaters);
17
18     }

2 将该回调协定的类型分配给ServiceContractAttribute Attribute的CallbackContract property。

在服务接口的上面添加属性标签

Ø客户端:

1 要对该接口实现

功能设计:

Ø 1 客户端调用服务端发送心跳通知

Ø 2服务端回调,调整心跳频率

主要代码

public interface ICallBack

{

[OperationContract(IsOneWay = true )]

void ChangeInterval(int seconds);

}

[ServiceContract(CallbackContract=typeof(ICallBack ))]

public interface IService1

{

[OperationContract]

void Heartbeat();

}

WCF Behanior

什么是Behavior

Ø Behavior即各种影响WCF系统运行的设置。

Ø 包括服务行为(Service Behavior)和操作行为(Operation Behavior)

Ø 服务行为作用在终节点上(实例控制、并发控制、元数据发布等)

Ø 操作行为作用于某一服务操作上(事务流设置等。

主要的Behavior

Ø 实例管理

Ø 并发管理

Ø 元数据发布管理

Ø 事务

7.WCF行为-实例管理和并发控制

两个只要的服务行为:

实例管理

如何为不同的Client生成Service instance,以及何时销毁instance

有个重要的枚举上已经介绍的比较清楚了:

namespace System.ServiceModel
{
    // 摘要:
    //     指定可用来处理包含在传入消息中的调用的服务实例数。
    public enum InstanceContextMode
    {
        // 摘要:
        //     为每个会话创建一个新的 System.ServiceModel.InstanceContext 对象。
        PerSession = 0,
        //
        // 摘要:
        //     新的 System.ServiceModel.InstanceContext 对象在每次调用前创建,在调用后回收。如果信道未创建会话,则该值的行为就如同
        //     System.ServiceModel.InstanceContextMode.PerCall 一样。
        PerCall = 1,
        //
        // 摘要:
        //     只有一个 System.ServiceModel.InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。如果服务对象不存在,则创建一个。
        Single = 2,
    }
}

WCF 实例管理的枚举

修饰服务类

ServiceBehavior特性,InstanceContextMode属性

并发管理

多线程

同样也有一个重要枚举:

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

WCF 并发管理的枚举

8.安全

安全控制

Ø 消息完整性

Ø 消息保密性

Ø 身份认证

WCF 安全- Transfer Security Mode

Transfer Security

Ø 保证消息完整性

Ø 保证消息保密性

1.None: 不采取任何安全措施,仅适合在内部安全环境使用。

2.Transport: 在传输协议级别上对通道的所有通讯进行加密,可使用的通讯协议包括 HTTPS、TCP、IPC 和 MSMQ。

3.Message: 通过相关标准(如 WS-Security)直接对消息进行加密。

4.Mixed(TransportWithMessageCredential): 混合了上面两种方式。使用 Transport 方式完成消息完整性、消息机密性以及服务器认证,而使用 Message 方式完成客户端认证。

5.Both: 使用 Transport 和 Message 共同完成所有的安全过程,,性能低下,只有 NetMsmqBinding 支持这一安全方式。

常用的配置方式是在配置文件中进行配置:

<bindings>

<netTcpBinding>

<binding name = “MyBinding">

<security mode = "Message" />

</binding>

</netTcpBinding>

</bindings>

WCF安全模式与绑定协议的搭配

WCF身份验证机制

身份验证机制 与Transfer mode的搭配

与Transport Transfer Mode的搭配

直接在配置文件中进行配置就可以:

以上信息数据来源可能是两年前的,没时间去整理新的就先使用了老的数据做简单梳理了。。。如果有任何问题请大家留言帮忙修正!谢谢!

时间: 2024-11-07 20:03:04

WCF研究-中篇的相关文章

WCF研究-前篇

前篇 1.从SOA说起 2.什么是WCF 3.WCF通信模型 4.Endpoint与ABC以及元数据 1.SOA (Service Oriented  Architecture) Ø 一种组件架构模型 Ø 主要特点 每个服务具有明确的服务边界. 服务独立,低耦合. 采用标准的契约定义和通信协议. 服务是自解释的. 2.WCF (Windows Communication  Foundation) Ø 是微软为SOA(Service-Oriented  Architecture)而设计的一套完整的

WCF Cookie处理

wcf操作cookie看似很简单,如果不对Wcf研究一把还是很难的,基本上无从下手. 这里上一图 上面的结果,岂止是坑爹,简直就是坑爹!!! 废话不多说,直接上代码: cookie读取 1 var requestProperties = OperationContext.Current.IncomingMessageProperties; 2 3 var hrp = requestProperties[HttpRequestMessageProperty.Name] as HttpRequest

.NET4.5中WCF中默认生成的basicHttpsBinding的研究

起因: 使用.net4.5建立了一个空白的WCF服务.默认使用的绑定配置是basicHttpsBinding. 问题发现: 1.用客户端进行服务引用,生成了默认的配置文件,其中绑定配置是basicHttpBinding. 2.因为需要单次传递大批量数据,所以修改绑定配置,如下: <basicHttpBinding> <binding name="BasicHttpBinding_IService" closeTimeout="00:10:00" r

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

http://www.cnblogs.com/artech/archive/2009/11/21/1607686.html 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖析(卷1)>写作期间,对WCF又有了新的感悟,为此以书名开始本人的第三个WCF系列.本系列的目的在于对<WCF技术剖析>的补充,会对书中的一些内容进行展开讲述,同时会囊括很多由于篇幅的原因忍痛割弃的内容. [第1篇] 通过一个ASP

C# WCF服务入门

之前在公司用的服务端是wcf写的,但是没有深入研究,最近找工作,面试的时候好多人看到这个总提问,这里做个复习 就用微软官方上的例子,搭一个简单的wcf服务,分6步 1 定义服务协定也就是契约,其实就是定义一个服务接口,这玩意后边是公开客户端用的,然后也告诉后边承载程序应该如何加载服务 主要涉及两个特性:一个是ServiceContract(接口的特性,定义这个是服务契约,里边又一些设置参数可以设置一下),OperationContract设置接口的方法的,如果不设置,方法就不会呗公开 这里是直接

【WCF】终结点的监听地址

终结点主要作用是向客户端公开一些信息入口,通过这个入口,可以找到要调用的服务操作.通常,终结点会使用三个要素来表述,我记得老蒋(网名:Artech,在园子里可以找到他)在他有关WCF的书里,把这三要素称为“ABC”. A就是Address,就是终结点的地址:B是Binding,绑定,用于描述传输的协议.是否启用安全模式等:C是Contract,即服务协定. 一个服务协定可以由多个终结点公开,比如一个终结点可能使用HTTP协议,另一个则使用TCP等. WCF是否真的像某些人说的那么复杂难学呢?依老

解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接

开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决方案都是千篇一律互相转发的,并且没有明确的解决方案或者按照,各个博客中的解决方案都没能解决这个问题. 为此我整整浪费了一天时间用来解决这个问题,而且用了最笨的办法一点点的尝试网上所查到的方案.对于精研WCF来说的这可能是一个小问题,但是对于仅仅了解wcf,一知半解的会很困惑.将解决方案贴出来希望能帮

WCF回顾一、基本概念和应用场景

一.WCF描述 wcf是一款基于面向服务的架构的通讯框架平台,在分布式框架中得到了广泛使用. wcf入门非常简单,只要花几分钟就能编写一个完整的wcf程序,而实际上WCF是概念非常多的一门技术,需要花很大精力去深入研究. 二.WCF优点 1.将各种通讯技术进行整合 WCF是对于 Web Service,Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合 表示层可以基于 soap XML传输  和 rest  http调用 传输层可以基于 http htt

wcf精通1-15

随笔- 197  文章- 0  评论- 3407 十五天精通WCF——第一天 三种Binding让你KO80%的业务 转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了,好了,wcf最基本的概念我们放在后面慢慢分析,下面我们来看看神奇的3个binding如何KO我们实际场景中的80%的业务场景. 一:basicHttpBinding 作为入门第一篇