// 模块主机(基)类
public class ModuleHost : IModuleHost
{
/* 属性 */
// 是否已加载
public bool IsLoaded { get; }
// 是否开启路由
public virtual bool RoutingEnabled { get; }
// 模块存放目录
public virtual string ModuleDirectory { get; }
// 正在工作模块列表
public IDictionary<string, WorkingModule> WorkingModules { get; }
// 令牌处理器,默认为:NullTokenResolver
public virtual ITokenResolver TokenResolver { get; }
// 端口配置管理器,默认为:XmlPortConfigManager
public virtual IPortConfigManager PortConfigManager { get; }
/* 主要方法成员 */
// 加载
public void Load();
// 加载核心的实现
protected virtual void LoadCore();
// 卸载
public void Unload();
// 卸载核心的实现
protected virtual void UnloadCore();
// 获取需要提供路由服务的通道上下文类型
public virtual IList<Type> GetChannelContextTypesForRoutingService();
/* 主要事件 */
// 主机加载后触发
public event EventHandler Loaded;
// 主机正在加载时触发
public event EventHandler Loading;
// 主机卸载后触发
public event EventHandler Unloaded;
// 主机正在卸载后触发
public event EventHandler Unloading;
// 模块加载失败时触发
public event EventHandler<ModuleLoadFailedEventArgs> ModuleLoadFailed;
// 模块状态发生改变时触发
public event EventHandler<ModuleStateChangedEventArgs> ModuleStateChanged;
// 工作模块被添加后触发
public event EventHandler<WorkingModuleAddedEventArgs> WorkingModuleAdded;
// 工作模块被移除后触发
public event EventHandler<WorkingModuleRemovedEventArgs> WorkingModuleRemoved;
/* 执行以上主要事件的默认方法 */
protected virtual void OnLoaded(object sender, EventArgs e);
protected virtual void OnLoading(object sender, EventArgs e);
protected virtual void OnUnloaded(object sender, EventArgs e);
protected virtual void OnUnloading(object sender, EventArgs e);
protected virtual void OnModuleLoadFailed(object sender, ModuleLoadFailedEventArgs e);
protected virtual void OnModuleStateChanged(object sender, ModuleStateChangedEventArgs e);
protected virtual void OnWorkingModuleAdded(object sender, WorkingModuleAddedEventArgs e);
protected virtual void OnWorkingModuleRemoved(object sender, WorkingModuleRemovedEventArgs e);
}
// 令牌处理器接口
public interface ITokenResolver
{
// 生成模块令牌
string GenerateToken(string serviceName);
// 验证模块令牌
bool VerifyToken(string serviceName, string tokenToVerify);
}
// 端口配置管理器接口
public interface IPortConfigManager
{
// 获取服务端口
IList<int> ServicePorts { get; }
// 根据端口获取配置
NameValueCollection GetConfig(int port);
// 根据端口保存配置
void SaveConfig(int port, NameValueCollection configs);
// 判断配置项是否合法
bool IsConfigItemValid(string name, string value, out string errorMessage);
}
// XML端口配置管理器(基)类
public class XmlPortConfigManager : IPortConfigManager
{
// 获取配置目录
public virtual string ConfigDirectory { get; }
// 获取服务端口
public IList<int> ServicePorts { get; }
// 根据端口获取配置
public NameValueCollection GetConfig(int port);
// 根据端口保存配置
public void SaveConfig(int port, NameValueCollection configs);
// 判断配置项是否合法
public bool IsConfigItemValid(string name, string value, out string errorMessage);
}
// 通道上下文基类
[Serializable]
public abstract class ChannelContextBase<TContext> : ChannelContextBase
where TContext : ChannelContextBase<TContext>, new()
{
/* 头部信息 */
// 头部信息的LocalName
protected internal virtual string ContextHeaderLocalName { get; }
// 头部信息的Namespace
protected internal virtual string ContextHeaderNamespace { get; }
/* 基本属性 */
// 获取当前通道上下文实例
public static TContext Current { get; set; }
// 返回信息(服务器端返回到客户端的信息)
public string ReturnMessage { get; set; }
// 通过key获取或设置上下文数据
public object this[string key] { get; set; }
/* 国际时间相关 */
// 时区
public TimeZoneInfo TimeZone { get; set; }
// 根据TimeZone属性转换本地时间为Utc时间
public DateTime ConvertTimeToUtc(DateTime dateTime);
// 根据TimeZone属性从Utc时间转换本地时间
public DateTime ConvertTimeFromUtc(DateTime dateTime);
/* 服务器端相关(客户端调用无效) */
// 获取当前服务端口
public int GetServicePort();
// 获取当前模块服务名称
public string GetServiceName();
// 获取当前服务端口的配置
public NameValueCollection GetConfig();
// 获取当前请求的原始客户端IP地址
public string GetRemoteEndpointAddress();
// 获取当前请求的客户端IP地址(可指定是否原始客户端)
public string GetRemoteEndpointAddress(bool original);
}
// 模块基类
public abstract class ModuleBase<TContext, TContract, TService> : IModule
where TContext : ChannelContextBase<TContext>, new()
where TService : TContract, new()
{
/* 基本属性 */
// 获取令牌
public virtual string Token { get; }
// 获取服务名称
public virtual string ServiceName { get; }
// 获取服务描述
public virtual string ServiceDescription { get; }
// 获取模块状态
public ModuleState State { get; }
// 获取通道验证器,默认为:NullChannelVerifier
public virtual IChannelVerifier ChannelVerifier { get; }
/* 基本方法 */
// 打开模块
public bool Open();
// 关闭模块
public bool Close();
// 模块被框架后
public virtual void OnLoad();
// 模块被卸载后
public virtual void OnUnload();
// 获取打开服务使用的NetTcpBinding
public virtual NetTcpBinding CreateNetTcpBinding();
/* 主要事件 */
// 正在打开时触发
public event EventHandler Opening;
// 已经打开时触发
public event EventHandler Opened;
// 正在关闭时触发
public event EventHandler Closing;
// 已经关闭时触发
public event EventHandler Closed;
// 失败时触发
public event EventHandler Faulted;
/* 执行以上主要事件的默认方法 */
protected virtual void OnOpening(object sender, EventArgs e);
protected virtual void OnOpened(object sender, EventArgs e);
protected virtual void OnClosing(object sender, EventArgs e);
protected virtual void OnClosed(object sender, EventArgs e);
protected virtual void OnFaulted(object sender, EventArgs e);
}
// 通道验证器接口
public interface IChannelVerifier
{
// 验证通道
VerifyChannelResult VerifyChannel(object contextState, Message message);
}
// 通道验证器基类
public abstract class ChannelVerifierBase<TVerifier> : IChannelVerifier
where TVerifier : ChannelVerifierBase<TVerifier>, new()
{
// 获取实例
public static IChannelVerifier Instance { get; }
// 验证通道
public abstract VerifyChannelResult VerifyChannel(object contextState, Message message);
}
// 模块客户端类
public static class ModuleClient
{
// 创建通道:没返
没有合适的资源?快使用搜索试试~ 我知道了~
WCF模块服务框架+WCF模块服务托管程序MSH
共66个文件
cs:11个
jpg:9个
dll:8个
3星 · 超过75%的资源 需积分: 9 20 下载量 92 浏览量
2012-12-08
16:40:44
上传
评论
收藏 1.77MB RAR 举报
温馨提示
这是一个基于WCF的一个轻量级但很实用的模块服务框架及服务托管程序MSH,目前版本支持的主要功能有: 1、支持WCF的路由中转服务2、支持自定义通道上下文。利用通道上下文可以方便地在调用 WCF服务时传递额外数据,使客户端与服务器端的交互更加灵活3、支持动态加载和卸载模块服务,利用这个特点,你可以快速部署并使用你的WCF服务4、支持模块服务被托管和调用时进行令牌的验证5、支持每个模块的自定义通道安全验证,还可以细化到每个服务方法6、支持不同模块服务使用不同的通道上下文。
资源推荐
资源详情
资源评论
收起资源包目录
MshDemo.rar (66个子文件)
MshDemo
MshDemo
MshExample.suo 53KB
MshDemo.sln 3KB
项目说明.txt 316B
MSH
KudySharp.dll 1.24MB
说明
msh2.png 11KB
main-members.txt 9KB
msh3.png 14KB
test
test9.jpg 44KB
test8.jpg 46KB
test2.jpg 43KB
test1.jpg 20KB
test6.jpg 73KB
test4.jpg 129KB
test3.jpg 41KB
test7.jpg 24KB
test5.jpg 78KB
msh4.png 20KB
msh1.png 84KB
MSH说明.txt 2KB
Configs
12321.xml 98B
12345.xml 100B
Modules
MyModule.dll 6KB
My.MSH.exe.config 800B
KudySharp.xml 1.85MB
Logs
2011-11-23.KudySharp.txt 4KB
My.MSH.exe 412KB
MshDemo.suo 19KB
MSH.Client
MainForm.Designer.cs 6KB
MainForm.cs 3KB
Program.cs 505B
Properties
Settings.settings 249B
Resources.Designer.cs 3KB
AssemblyInfo.cs 1KB
Settings.Designer.cs 1KB
Resources.resx 5KB
MainForm.resx 6KB
TestForm.suo 18KB
MSH.Client.csproj 4KB
bin
KudySharp.dll 1.24MB
MSH.Client.vshost.exe 11KB
MSH.Client.exe 12KB
MyModule.dll 6KB
MSH.Client.vshost.exe.manifest 490B
Logs
MSH.Client.csproj.user 227B
MyModule
IMyService.cs 331B
Properties
AssemblyInfo.cs 1KB
MyModule.cs 971B
MyService.cs 702B
MyModule.csproj 2KB
MyChannelContext.cs 602B
MyModule.csproj.user 227B
obj
Debug
ResolveAssemblyReference.cache 12KB
TestModule.dll 6KB
TempPE
TestModule.pdb 14KB
DesignTimeResolveAssemblyReferencesInput.cache 6KB
MyModule.dll 6KB
MyModule.pdb 14KB
MyModule.csproj.FileListAbsolute.txt 723B
TestModule.csproj.FileListAbsolute.txt 401B
Release
TestModule_1_0_0.dll 7KB
TestModule_1_0_0.pdb 14KB
TestModule.dll 6KB
TempPE
TestModule.pdb 14KB
DesignTimeResolveAssemblyReferencesInput.cache 6KB
TestModule_1_0_0.csproj.FileListAbsolute.txt 504B
TestModule.csproj.FileListAbsolute.txt 462B
共 66 条
- 1
资源评论
- 红名客人2013-03-06不错的入门实例!
- 美女两个2014-07-18不能下载, 几点无数次了....还扣掉积分了
luwf01f
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功