WCF 关于自定义MessageHeader支持

  我们在项目中有些公共信息可以不通过方法参数提供,将这些信息封装到MessageHeader,通过客户端提交给Server。这种情况下我们需要注意WCF不同的实例模式、会话模式对Header的支持情况:plowq.com

  实力模式(InstanceContextMode)PerCall、PerSession支持Header,但是Single不支持自定义header,表现是无法获取Header内容

  另外如果在ServiceContract中启用会话模式(SessionMode)声明,那么SessionMode.NoAllowed、SessionMode.Allowed两种模式下是可以接收到Header的,但是SessionMode.Required模式无法接收Header,给我的感觉是Session跟messageheader有冲突。

  建议:InstanceContextMode采用PerCall,而SessionMode采用NoAllowed;如果我们不做显示声明InstanceContextMode默认采用PerSession,而SessionMode采用Allowed

  在PerCall、PerSession、Single三种模式中,PerCall是性能最高的,节省资源,支持系统的可伸缩性。由于服务实例的生命周期只存在于一次调用期间,特别对于那些持有昂贵资源的服务实例而言,这种方式可以有效地提高系统性能。销毁服务实例时,WCF不会断开与客户端的连接。pmkdu.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WCF(Windows Communication Foundation)是一个用于创建分布式应用程序的框架。在WCF中,可以使用多种方式来托管(host)服务,包括IIS、Windows服务、自定义宿主等。 下面介绍一下如何使用自定义宿主来托管WCF服务: 1. 创建一个实现了System.ServiceModel.ServiceHost类的自定义宿主。 ```csharp public class MyServiceHost : ServiceHost { public MyServiceHost(Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) { } protected override void OnOpening() { // 在打开宿主之前可以进行一些预处理工作 base.OnOpening(); } protected override void OnClosed() { // 在关闭宿主之前可以进行一些清理工作 base.OnClosed(); } } ``` 2. 在自定义宿主中添加WCF服务的终结点。 ```csharp public class MyServiceHost : ServiceHost { public MyServiceHost(Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) { } protected override void OnOpening() { // 添加终结点 this.AddServiceEndpoint(typeof(IMyService), new BasicHttpBinding(), "http://localhost/MyService"); base.OnOpening(); } protected override void OnClosed() { base.OnClosed(); } } ``` 3. 在应用程序中创建自定义宿主实例,并启动宿主。 ```csharp var host = new MyServiceHost(typeof(MyService)); host.Open(); ``` 4. 关闭自定义宿主。 ```csharp host.Close(); ``` 通过自定义宿主,可以对WCF服务进行更加细粒度的控制和定制,比如添加自定义行为、启用安全性等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值