• KudySharp 中的 ModuleFramework(WCF模块框架)


    在.Net项目中,有时候我们需要开发并部署多个WCF服务模块,而且希望WCF服务能和各个网站更好的沟通,必要时还需要作相应的安全验证等等,这里所以要介绍的就是满足这些需求的WCF模块框架,使用此框架只需要引用KudySharp类库。

       

      当接收到客户端发出的请求后,首先会验证所请求的模块令牌(token)(下面会介绍),然后执行模块主机的自定义通道验证(所有模块请求都会执行),最先执行所请求的模块的自定义通道验证,如果全部验证都通过了,执行被调用接口并返回到客户端。

      

      另外,此框架还支持WCF路由,就是说,部署在多部服务器上,把其中一台服务器作为请求的入口来调用其它服务器上的模块服务。路由可以是多重的,如上图所示。 

     下面介绍使用它必须要了解的4个类成员:

    模块主机基类(ModuleHost),上面图解中的Token验证和ModuleHost验证就是在此类中实现的(VerifyChannel),需要开发的模块返回的Token也是由它产生的。

        public class ModuleHost : MarshalByRefObject, IChannelVerifier, IModuleHost
    {
    // 生成模块令牌
    public virtual string GenerateToken(string tokenSalt, string serviceName);

    // 验证模块令牌
    public virtual bool VerifyToken(string token, string serviceName);

    // 自定义通道验证(所有模块请求,此方法都会先被执行)
    public virtual VerifyChannelResult VerifyChannel(ChannelContext channelContext);


    // 其它成员....
    }

     模块基类(ModuleBase),上面图解中的Module验证就是在此类中实现的(VerifyChannel),Token值由上面的模块主机类产生。

        public abstract class ModuleBase<TModule, TContract, TService> : IChannelVerifier, IModule
    where TModule : ModuleBase<TModule, TContract, TService>, new()
    where TService : TContract, new()
    {
    // 模块令牌
    public abstract string Token { get; }

    // 模块被加载后执行
    public virtual void OnLoad();

    // 模块被卸载后执行
    public virtual void OnUnload();

    // 模块内部的自定义通道验证(此模块请求时,此方法才会被执行)
    public virtual VerifyChannelResult VerifyChannel(ChannelContext channelContext);

    // 其它成员....
    }

     通道上下文类(ChannelContext),用于客户端与服务器端的附加信息传递。

        [Serializable]
    public sealed class ChannelContext : MarshalByRefObject, ILogicalThreadAffinative
    {
    // 当前通道上下文实例
    public static ChannelContext Current { get; set; }

    // 上下文数据
    public Dictionary<string, object> ContextData { get; }

    // 通过键值访问或设置上下文数据
    public object this[string key] { get; set; }

    // 时区(需要处理国际化时间时才可能用得上)
    public TimeZoneInfo TimeZone { get; set; }

    // 返回信息(一般情况下客户端需要得到服务端的返回信息,需要额外的信息,可以通过ContextData或键值索引来设置)
    public string ReturnMessage { get; set; }

    // 两个基于 TimeZone 属性转换时间的方法
    public static DateTime ConvertTimeFromUtc(DateTime dateTime);
    public static DateTime ConvertTimeToUtc(DateTime dateTime);

    // 获取当前服务端口
    public static int GetCurrentServicePort();

    // 获取当前服务名称
    public static string GetCurrentServiceName();

    // 获取最先请求的客户端IP地址
    public static string GetCurrentRemoteEndpointAddress();

    // 获取请求的客户端IP地址(在启用路由的情况下,可指定原始请求的还是直接请求的客户端)
    public static string GetCurrentRemoteEndpointAddress(bool original);
    }

    模块客户端类(ModuleClient),这个类是给客户端调用模块服务接口的工具类。

        public static class ModuleClient
    {
    // 创建通道,没返回值
    public static void CreateChannel<TModule, TChannel>(string server, int port, Action<TChannel> action);

    // 创建通道,有返回值TResult
    public static TResult CreateChannel<TModule, TChannel, TResult>(string server, int port, Func<TChannel, TResult> action);

    // 创建通道并启用路由,没返回值
    public static void CreateChannel<TModule, TChannel>(string server, int port, Action<TChannel> action, params string[] routingServers);

    // 创建通道并启用路由,有返回值TResult
    public static TResult CreateChannel<TModule, TChannel, TResult>(string server, int port, Func<TChannel, TResult> action, params string[] routingServers);
    }


    有了上面的重要成员介绍,要基于它开发WCF服务就不难了,然而,这只是一个基本的框架,要管理WCF服务还是需要写一些额外的代码的,为了方便使用,本人另外写了个基于这框架的WCF模块服务托管程序MSH(Module Service Hosting),有关它的介绍与开发实例请看这篇文章:

    基于KudySharp 中的 ModuleFramework(模块框架)的ModuleServiceHosting(MSH)WCF模块服务托管程序介绍与开发实例 

    随笔档案 - 2011年11月

    [推荐]最新jQuery多功能对话框插件 jBox 2.3下载及常见使用问题解答

    2011-11-09 05:16 by kudychen, 450 visits, 网摘收藏编辑
    摘要:插件说明- jBox 是一款基于 jQuery 的多功能对话框插件,能够实现网站的整体风格效果,给用户一个新的视觉享受。运行环境- 兼容 IE6+、Firefox、Chrome、Safari、Opera 等主流浏览器。使用授权- jBox 永久免费使用,但是必须保留相关的版权信息。如果有好的建议,可以直接在下面留言。版本:2.3大小:19.8k下载:点击下载[2011-11-08] jBox v2.3 beta 版本更新- [新增] tip方法增加了 opacity 选项,它决定是否显示隔离层。- [新增] 增加了 showScrolling 选项,在显示jBox窗口时可以隐藏浏览器的滚动条。 阅读全文

    高性能网站建设的14个原则

    2011-11-07 22:39 by kudychen, 116 visits, 网摘收藏编辑
    摘要:今日大致浏览了一下《High Performance Web Sites》。本书的中文版是《高性能网站建设指南》。本书另有对其中个别问题深入探究的进阶篇《Even Faster Web Sites》,中译《高性能网站建设进阶指南》。作者介绍上面的豆瓣链接中有,就不再照搬过来了。这本书中给出了14条网站性能提升的原则,每个原则独立成章,配有示例。这些原则大多数都非常实用,适合站点架构师、前端工程师。其中对于前端工程师的意义更大一些。这次看的是原版。我对于Web开发较缺乏实践经验,加之看得匆忙,因此可能存在遗漏、表述不当之处,希望广大网友不吝指正。原则1 减少HTTP请求数构造请求、等待响应需要时 阅读全文

    基于KudySharp 中的 ModuleFramework(模块框架)的ModuleServiceHosting(MSH)模块服务托管程序介绍与开发实例

    2011-11-07 04:38 by kudychen, 670 visits, 网摘收藏编辑
    摘要:MSH是基于KudySharp的模块框架(ModuleFramework)写的一个WCF服务模块托管程序,它提供了常用功能来管理自定义的模块服务,有了它,你可以快速开发和部署自己的WCF服务,使各个应用程序之间的沟通更方便。 阅读全文

    KudySharp 中的 ModuleFramework(WCF模块框架) 介绍

    2011-11-07 03:44 by kudychen, 684 visits, 网摘收藏编辑
    摘要:一个WCF服务模块框架,它提供了常用功能来管理自定义的模块服务,有了它,你可以快速开发和部署自己的WCF服务,使各个应用程序之间的沟通更方便。 阅读全文

    分享一个通用的强大主数据管理系统(包括系统架构设计的讲解和全部源码下载)

    2011-11-07 03:41 by kudychen, 4921 visits, 网摘收藏编辑
    摘要:这篇文章要讲主数据管理系统(Master Data Management System),是本人创业的其中一个项目,用于管理公司的内部所有系统、系统用户、系统角色、系统权限、服务器管理、系统日志等数据。项目开发只用了1个多月时间,全部由一个人完成的,还有不够完善的地方,对于初版本也差不多够用了,如果没时间看下面的架构设计,可以直接下载源码。 阅读全文

    共享一款基于 jQuery 的多功能对话框插件 jBox,强不强大,用了才知道:)

    2011-11-06 23:18 by kudychen, 2709 visits, 网摘收藏编辑
    摘要:jBox 是一款基于 jQuery 的多功能对话框插件,能够实现网站的整体风格效果,给用户一个新的视觉享受。 阅读全文
  • 相关阅读:
    Codechef Observing the Tree
    bzoj 1367: [Baltic2004]sequence
    bzoj 2375: 疯狂的涂色
    bzoj 1455: 罗马游戏
    codevs 1029 遍历问题
    HNOI2004 宠物收养所 (Treap)
    [ZJOI2007] 报表统计
    bzoj 3261: 最大异或和 (可持久化trie树)
    codevs 1001 舒适的路线
    Codechef Dynamic Trees and Queries
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2242031.html
Copyright © 2020-2023  润新知