【MSH】如何开发第一个最简单的WCF模块服务(附实例源码)
2011-11-25 15:22
806 查看
还不知道什么MSH的朋友请看开篇文章: 【MSH】一个轻量级但很实用的WCF模块服务框架+WCF模块服务托管程序MSH[开篇]
Module Service Hosting(MSH),是一个WCF服务模块托管程序,它提供了常用功能来管理自定义的模块服务,有了它,你可以快速开发和部署自己的WCF服务,使各个应用程序之间的沟通更方便。
在开篇文章里不少朋友说看不懂或不知道用它来干什么的,其实它就是一个搭好了的轻量型框架,方便大家快速有效的开发WCF服务、部署WCF服务、使客户端和服务器端安全、灵活交互等等。或许是目前使用WCF的人还很少吧,还在使用Web Service。好了,进入正题:
下载MSH1.0 (for .net 3.5)
下载最简单的MshDemo (for vs2010 & .net 3.5)
请先看实例的项目结构:
1. MSH 目录下存放MSH主程序,改名为My.MSH.exe,配置相应也改为My.MSH.exe.config;
2. MyModule 项目是WCF模块,引用MSH目录下的程序集 KudySharp.dll,在项目属性选择输出到 MSH\Modules 目录下。
2. MSH.Client 项目是客户端winform测试项目,引用MyModule项目和MSH目录下的程序集 KudySharp.dll。
下面开始讲如何完成下面的项目:
提示:本人vs2010,而且使用.net3.5
一、新建解决方案 MshDemo
二、新建类库项目 MyModule ,选中项目右键打开项目属性,把默认命名空间改为 My.Msh,引用MSH目录下的程序集 KudySharp.dll ,最后在项目属性选择输出到 MSH\Modules 目录下。
1.定义通道上下文 MyChannelContext
2.定义WCF服务接口 IMyService
3.实现WCF服务接口 MyService
4.最后定义模块服务类 TestModule
到这里,模块项目开发完了, 点击生成后,可以在 MSH\Modules 目录下看到 MyModule.dll。
二、下面接着写客户端测试程序,新建 MSH.Client 项目,引用 MyModule 项目和 MSH 目录下的程序集 KudySharp.dll。
下面是调用上面WCF接口的测试代码:
最后,运行MSH.Client项目,显示了如下界面:
点击 Run MSH 运行MSH主程序,可以看到被托管的模块服务MyModule
然后再分别点击按钮测试那两个接口的返回结果:
OK,测试完成了~
Module Service Hosting(MSH),是一个WCF服务模块托管程序,它提供了常用功能来管理自定义的模块服务,有了它,你可以快速开发和部署自己的WCF服务,使各个应用程序之间的沟通更方便。
在开篇文章里不少朋友说看不懂或不知道用它来干什么的,其实它就是一个搭好了的轻量型框架,方便大家快速有效的开发WCF服务、部署WCF服务、使客户端和服务器端安全、灵活交互等等。或许是目前使用WCF的人还很少吧,还在使用Web Service。好了,进入正题:
下载MSH1.0 (for .net 3.5)
下载最简单的MshDemo (for vs2010 & .net 3.5)
请先看实例的项目结构:
1. MSH 目录下存放MSH主程序,改名为My.MSH.exe,配置相应也改为My.MSH.exe.config;
2. MyModule 项目是WCF模块,引用MSH目录下的程序集 KudySharp.dll,在项目属性选择输出到 MSH\Modules 目录下。
2. MSH.Client 项目是客户端winform测试项目,引用MyModule项目和MSH目录下的程序集 KudySharp.dll。
下面开始讲如何完成下面的项目:
提示:本人vs2010,而且使用.net3.5
一、新建解决方案 MshDemo
二、新建类库项目 MyModule ,选中项目右键打开项目属性,把默认命名空间改为 My.Msh,引用MSH目录下的程序集 KudySharp.dll ,最后在项目属性选择输出到 MSH\Modules 目录下。
1.定义通道上下文 MyChannelContext
/// <summary> /// 定义通道上下文,必须是继承 ChannelContextBase<TContext> /// </summary> [Serializable] // 类和属性都必须是可序列化的 public class MyChannelContext : ChannelContextBase<MyChannelContext> { /// <summary> /// 自定义属性 /// </summary> public string AppName { get; set; } }
2.定义WCF服务接口 IMyService
/// <summary> /// 服务接口 /// </summary> [ServiceContract] public interface IMyService { [OperationContract] DateTime GetTime(); [OperationContract] string GetString(string str); }
3.实现WCF服务接口 MyService
/// <summary> /// 服务实现 /// </summary> public class MyService : IMyService { public DateTime GetTime() { return DateTime.Now; } public string GetString(string input) { var context = MyChannelContext.Current; string ret = "input:" + input; ret += "\r\nAppName:" + context.AppName; ret += "\r\nAppName2:" + context["AppName2"]; // 返回信息给客户端,当然也可以是你自己定义的其它属性 context.ReturnMessage = "OK"; return ret; } }
4.最后定义模块服务类 TestModule
/// <summary> /// 自己定义模块,必须是继承 ModuleBase<TContext, TContract, TService> /// </summary> public sealed class TestModule : ModuleBase<MyChannelContext/*使用的通道上下文*/, IMyService/*WCF接口约束*/, MyService/*WCF接口实现*/> { // 此例子使用了框架里默认的模块主机,所以不需要重写令牌 /// <summary> /// 模块服务名称 /// </summary> public override string ServiceName { get { return "MyService"; } } /// <summary> /// 模块服务描述 /// </summary> public override string ServiceDescription { get { return "this is my first module service"; } } }
到这里,模块项目开发完了, 点击生成后,可以在 MSH\Modules 目录下看到 MyModule.dll。
二、下面接着写客户端测试程序,新建 MSH.Client 项目,引用 MyModule 项目和 MSH 目录下的程序集 KudySharp.dll。
下面是调用上面WCF接口的测试代码:
private void btnGetTime_Click(object sender, EventArgs e) { try { DateTime result = ModuleClient.CreateChannel<TestModule, IMyService, DateTime>(server, port, proxy => { return proxy.GetTime(); }); MessageBox.Show("Time:" + result.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnGetString_Click(object sender, EventArgs e) { try { string result = ModuleClient.CreateChannel<TestModule, IMyService, string>(server, port, proxy => { // 通道上下文必须是在这个action里面设置属性,外面无效 var context = MyChannelContext.Current; context.AppName = "MSH client"; context["AppName2"] = "MSH client2"; return proxy.GetString("i am kudy"); }); MessageBox.Show(result + "\r\n\r\nReturnMessage:" + MyChannelContext.Current.ReturnMessage); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
最后,运行MSH.Client项目,显示了如下界面:
点击 Run MSH 运行MSH主程序,可以看到被托管的模块服务MyModule
然后再分别点击按钮测试那两个接口的返回结果:
OK,测试完成了~
相关文章推荐
- 使用WCF实现SOA面向服务编程——简单的WCF开发实例
- 一起谈.NET技术,使用WCF实现SOA面向服务编程——简单的WCF开发实例
- 使用WC“.NET研究”F实现SOA面向服务编程——简单的WCF开发实例
- 使用W“.NET技术”CF实现SOA面向服务编程——简单的WCF开发实例
- 热门话题:使用WCF实现SOA面向服务编程(二)——实现简单的WCF开发实例
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
- WCF开发实战系列一:创建第一个WCF服务
- WCF开发实战系列一:创建第一个WCF服务
- WCF开发实战系列一:创建第一个WCF服务
- WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
- 我下载了一个DNN模块的源码,如何加入我的DNN开发环境并编辑它?
- C# WCF简单实例 出错:调用方未由服务进行身份验证
- 如何创建一个简单的基于OleTx协议的WCF事务实例
- WCF揭秘——简单的WCF开发实例
- WCF开发实战系列一:创建第一个WCF服务
- WCF开发实战系列一:创建第一个WCF服务
- WCF开发实战系列一:创建第一个WCF服务
- B2B中的WCF,如何用WCF开发一个只需签名不加密的网络服务(Secured Web Service)
- 【MSH】一个轻量级但很实用的WCF模块服务框架+WCF模块服务托管程序MSH[开篇]