博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【MSH】如何开发第一个最简单的WCF模块服务(附实例源码)
阅读量:5942 次
发布时间:2019-06-19

本文共 3898 字,大约阅读时间需要 12 分钟。

  还不知道什么MSH的朋友请看开篇文章:  

 

   Module Service Hosting(MSH),是一个WCF服务模块托管程序,它提供了常用功能来管理自定义的模块服务,有了它,你可以快速开发和部署自己的WCF服务,使各个应用程序之间的沟通更方便。

 

  在开篇文章里不少朋友说看不懂或不知道用它来干什么的,其实它就是一个搭好了的轻量型框架,方便大家快速有效的开发WCF服务、部署WCF服务、使客户端和服务器端安全、灵活交互等等。或许是目前使用WCF的人还很少吧,还在使用Web Service。好了,进入正题:

 


 

 (for .net 3.5)

 (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

///     /// 定义通道上下文,必须是继承 ChannelContextBase
///
[Serializable] // 类和属性都必须是可序列化的 public class MyChannelContext : ChannelContextBase
{ ///
/// 自定义属性 /// public string AppName { get; set; } }

 

  2.定义WCF服务接口 IMyService

///     /// 服务接口    ///     [ServiceContract]    public interface IMyService    {        [OperationContract]        DateTime GetTime();        [OperationContract]        string GetString(string str);    }

 

  3.实现WCF服务接口 MyService

///     /// 服务实现    ///     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

///     /// 自己定义模块,必须是继承 ModuleBase
///
public sealed class TestModule : ModuleBase
{ // 此例子使用了框架里默认的模块主机,所以不需要重写令牌 /// /// 模块服务名称 /// public override string ServiceName { get { return "MyService"; } } /// /// 模块服务描述 /// 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
(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
(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,测试完成了~

 

 

转载于:https://www.cnblogs.com/kudy/archive/2011/11/25/2263213.html

你可能感兴趣的文章
古老的SSM企业级应用
查看>>
saltstack之(二)软件包下载安装
查看>>
环境搭建实录一
查看>>
痞子衡嵌入式:第一本Git命令教程(7.1)- 清理之缓存(stash)
查看>>
素数表
查看>>
[转载]OBJECTIVE C (XCODE) 绘图功能简介
查看>>
Yii2.0 连接数据库
查看>>
013_RomanToInteger
查看>>
使用极光推送实现分组发送和服务端集成
查看>>
POJ 1170 Shoping Offers(IOI 95)
查看>>
Hand on Machine Learning第三章课后作业(1):垃圾邮件分类
查看>>
博客搬家了
查看>>
JavaScript中的作用域,闭包和上下文
查看>>
Python中使用ElementTree解析xml
查看>>
Python LOGGING使用方法
查看>>
Dominating Patterns
查看>>
diamond types are not supported at this language level
查看>>
C++ BigInt模板手打
查看>>
解决方案、项目、程序集、命名空间
查看>>
Java温故而知新(1)集合类
查看>>