中篇

5.托管于宿主

6.消息模式

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

8.安全

5.托管于宿主

托管

宿主Host

Ø承载WCF Service运行的环境
自承载方式
系统服务方式
IIS方式
WAS
 

建立Winform宿主
  关键代码

ServiceHost host = new ServiceHost(service Type );

host.Open();

  private void button1_Click(object sender, EventArgs e)
{ System.ServiceModel.ServiceHost myhost = new System.ServiceModel.ServiceHost(typeof(WeatherInfoService.WeatherInfoService)); try
{
myhost.Open(); this.textBox1.AppendText(myhost.State.ToString() + " 已经启动" + DateTime.Now);
}
catch (Exception)
{
this.textBox1.AppendText(" 启动错误" + DateTime.Now);
} System.Threading.Thread.Sleep(); try
{
myhost.Close();
this.textBox1.AppendText(myhost.State.ToString() + " 已经Close" + DateTime.Now);
}
catch (Exception)
{
this.textBox1.AppendText(" 启动错误" + DateTime.Now);
}
}

宿主代码

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 需要设计用于回调的服务协定,
  public interface IChatCallBack
{
[OperationContract(IsOneWay = true)]
void Receive(string name, string msg); [OperationContract(IsOneWay = true)]
void ReceiveWhisper(string name, string msg); [OperationContract(IsOneWay = true)]
void UserEnter(string name); [OperationContract(IsOneWay = true)]
void UserLeave(string name); [OperationContract(IsOneWay = true)]
void LoadUsers(List<string> chaters); }

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 = ,
//
// 摘要:
// 新的 System.ServiceModel.InstanceContext 对象在每次调用前创建,在调用后回收。如果信道未创建会话,则该值的行为就如同
// System.ServiceModel.InstanceContextMode.PerCall 一样。
PerCall = ,
//
// 摘要:
// 只有一个 System.ServiceModel.InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。如果服务对象不存在,则创建一个。
Single = ,
}
}

WCF 实例管理的枚举

修饰服务类

ServiceBehavior特性,InstanceContextMode属性
并发管理
多线程
同样也有一个重要枚举:

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

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的搭配
 
直接在配置文件中进行配置就可以:
 
 
 
以上信息数据来源可能是两年前的,没时间去整理新的就先使用了老的数据做简单梳理了。。。如果有任何问题请大家留言帮忙修正!谢谢!
 
 

WCF研究-中篇的更多相关文章

  1. WCF研究-后篇

    最后就对之前的资料进行整理以及在其他博客园的朋友那看到的资料稍微分享一下,这样有助于学习和使用WCF的朋友更好的学习和理解WCF 后期要是看到合适的资料也会再次编辑这个后篇,让我共同进步! 后篇 1. ...

  2. WCF研究-前篇

    前篇 1.从SOA说起 2.什么是WCF 3.WCF通信模型 4.Endpoint与ABC以及元数据    1.SOA (Service Oriented  Architecture) Ø 一种组件架 ...

  3. WCF Cookie处理

    wcf操作cookie看似很简单,如果不对Wcf研究一把还是很难的,基本上无从下手. 这里上一图 上面的结果,岂止是坑爹,简直就是坑爹!!! 废话不多说,直接上代码: cookie读取 var req ...

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

    起因: 使用.net4.5建立了一个空白的WCF服务.默认使用的绑定配置是basicHttpsBinding. 问题发现: 1.用客户端进行服务引用,生成了默认的配置文件,其中绑定配置是basicHt ...

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

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

  6. WCF技术剖析之二十一:WCF基本异常处理模式[中篇]

    原文:WCF技术剖析之二十一:WCF基本异常处理模式[中篇] 通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultExcept ...

  7. WCF技术剖析之十七:消息(Message)详解(中篇)

    原文:WCF技术剖析之十七:消息(Message)详解(中篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在上篇中 ...

  8. 研究WCF并发及处理能力的控制

    WCF 跟并发 性能相关的几个配置:1.系统控制的客户端网络连接并发(如果服务端也需要并发请求的话这个参数也是需要的):          <configuration>          ...

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

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

随机推荐

  1. mysql-实现行号

    目前mysql不支持像oracle一样rownum,在网上也查找了好多,各种写法,自己进行了总结,实现方法如下 新建表: userid salay zhangsan 10000 lisi 12000 ...

  2. IWXAPI的使用,发布分享和支付

    今天看代码,看到以前项目的微信支付功能,想做一下记录 首先是在application类里面定义 public static IWXAPI MSGAPI; public static final Str ...

  3. windows 7 64位下配置mysql64位免安装版

    1.官方网站下载mysql-noinstall-5.1.51-winx64.zip 2.解压到E:\Program Files\MySQL.(路径自己指定) 3.在E:\Program Files\M ...

  4. ICO图标在线生成,php生成ICO图标在线制作源码

    我们做web系统的时候,每个浏览器的tab这里都会有一个图标,这个图标叫favicon图标,favicon.ico文件放在系统的根目录 如果程序员没有ICO制作工具,那么要如何生成图标呢?可以用程序来 ...

  5. Android中TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题

    最近在使用TabHost的时候遇到了一些奇怪的问题,在这里总结分享备忘一下. 首先说一点TabActivity将会被FragmentActivity所替代,但是本文中却是使用的TabActivity. ...

  6. WPF MVVM系列文章

    网上搜到了MSDN Magazine上Laurent Bugnion的系列文章. 以下为关于WPF的优秀实践,很有必要阅读. 很吸引人的标题有: IOC Containers and MVVM Mes ...

  7. ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core MVC 设计模式 上一章节中,我们提到 ASP.NET Co ...

  8. 从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法

    原文:从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法 主程序 为 Main_Test.exe 被加载的DLL 为 Load_Test.dll  此DLL 中 有一个 文件夹Re ...

  9. ORA-00600: internal error code, arguments: [4194], [53], [41], [], [], [], [], []

    真的不动,关闭同事开发测试IBM 3650server它直接关系到电源插头行??? 第二天加点重新启动之后oracle 打开报错ORA-00600: internal error code, argu ...

  10. WPF与缓动(一) N次缓动

    原文:WPF与缓动(一) N次缓动   WPF与缓动(一)  N次缓动                                                                  ...