上一篇已经把我们的基础通信做好了,接下来就开始创建页面与页面服务,首先来看下我们页面与页面服务的接口定义,一目清晰了然。
页面接口的定义:
public interface IPage { string InstanceId { get; } bool IsPageServiceCreated { get; } ICoreClient CoreClient { get; } /// <summary> /// 初始化页面 /// </summary> void Initialize(); /// <summary> /// 关闭页面 /// </summary> void Close(); /// <summary> /// 调用服务方法 /// </summary> /// <param name="methodName">方法名称</param> /// <param name="paramTypes">方法参数类型的类名列表</param> /// <param name="args">方法参数集合</param> /// <returns>返回结果</returns> object CallService(string methodName, string[] paramTypes, params object[] args); /// <summary> /// 单向调用服务方法(通信成功即返回,不等待方法执行) /// </summary> /// <param name="methodName">方法名称</param> /// <param name="paramTypes">方法参数类型的类名列表</param> /// <param name="args">方法参数集合</param> void OneWayCallService(string methodName, string[] paramTypes, params object[] args); /// <summary> /// 调用页面服务 /// </summary> object CallPageService(string methodName, string[] paramTypes, params object[] args); /// <summary> /// 单向调用页面服务 /// </summary> void OneWayCallPageService(string methodName, string[] paramTypes, params object[] args); }
页面服务接口的定义:
public interface IPageService { /// <summary> /// 页面实例ID /// </summary> string InstanceId { get; } ISession Session { get; } void SetSession(ISession session); /// <summary> /// 初始化页面服务 /// </summary> void Initialize(); /// <summary> /// 关闭页面服务 /// </summary> void Close(); /// <summary> /// 回调页面客户端方法 /// </summary> /// <param name="methodName">方法名称</param> /// <param name="paramTypes">方法参数类型的类名列表</param> /// <param name="args">方法参数集合</param> /// <returns>客户端方法返回结果</returns> object CallPage(string methodName, string[] paramTypes, params object[] args); /// <summary> /// 单向回调页面客户端方法(通信成功即返回,不等待方法执行) /// </summary> /// <param name="methodName">方法名称</param> /// <param name="paramTypes">方法参数类型的类名列表</param> /// <param name="args">方法参数集合</param> void OneWayCallPage(string methodName, string[] paramTypes, params object[] args); /// <summary> /// 销毁页面服务 /// </summary> void Dispose(); }
接下来就是页面基类的实现:
View Code
页面基类实现了页面与服务通信与函数调用的基本功能。
页面服务基类的实现:
View Code
下面就做个单元测试,测试下我们的成果吧。
测试页面定义:
public class Page1 : PageBase { public void WriteLine(string msg) { Console.WriteLine(msg); } }
测试页面服务定义:
public class ServicePage1 : PageServiceBase { public void InvokeClientConsole() { this.OneWayCallPage("WriteLine", null, "Hello World!"); } }
启动服务端:
class Program { static void Main(string[] args) { XmlConfigurator.Configure(); Program p = new Program(); string path = Path.Combine(Environment.CurrentDirectory, "GL.Service.Test.config"); var partPath = @"C:GLGL.DynamicDLLLoadTestGL.ReleaseServiceTest"; //启动插件平台 PartPlatform.Instance.Start(path, new string[] { partPath }); Console.WriteLine("PartPlatform Started"); //启动核心服务 Program.StartService("GL WCF Service", typeof(CoreService)); Console.WriteLine("CoreServiceHost Started"); Console.ReadKey(); } private static IList<ServiceHost> _startedServices = new List<ServiceHost>(); private static void StartService(string serviceName, Type serviceType) { var service = new ServiceHost(serviceType); service.Open(); _startedServices.Add(service); } }
启动客户端:
class Program { [STAThreadAttribute] static void Main(string[] args) { XmlConfigurator.Configure(); Program p = new Program(); string path = Path.Combine(Environment.CurrentDirectory, "GL.Service.Test.config"); var partPath = @"C:GLGL.DynamicDLLLoadTestGL.ReleaseClientTest"; //启动插件平台 PartPlatform.Instance.Start(path, new string[] { partPath }); //连接到服务端 var coreClient = PartPlatform.Instance.GetSinglePart<ICoreClient>(); var sessionID = coreClient.Connect(new GL.Contracts.ClientConnectionInfo() { UserName="GL", UserPassword = "GL" }); Console.WriteLine("sessionID:{0}", sessionID); while (Console.ReadKey().KeyChar == (char)Keys.Enter) { //创建页面 var pg = PageFactory.CreatePage("GL.Client.Page1.Page1"); Console.WriteLine("OneWayCallService" + pg.InstanceId); //调用页面服务 var request = new Request(); request.InstanceId = pg.InstanceId; request.MethodName = "InvokeClientConsole"; request.ParamTypes = null; request.Parameters = null; coreClient.OneWayCallPageService(request); } Console.ReadLine(); } }
最激动人心的时刻,永远是屏幕出现那令人期待的Hello World!享受我们的成果吧!
分类: C#
文章目录:
引言:
平时没有项目压力时候,首先想到的是充电学习,要系统学习都会想到购买书籍,或者向同事借阅。买的书多了烦恼也来了,因为大学到现在5-6年陆续买了上百本开发书籍,面对堆积如山的书,每每搬家,排队,等公车都无法做到便捷。于是想到把这些纸质的书全部转行为电子书,刚好上次一位好友索要,于是第一次动手自己做了一个PDF电子书,这样每次用Galaxy Note2或Ipad看书,真是太爽了,实在是居家旅行 杀人灭口 必备良药!分享如下:
书籍首页
书籍目录
备注:
由于博客园目前文件大小不支持超过10M,所以这边不能提供下载链接。
制作电子书,要扫描每一页为图片,然后再次用PDF进行编辑,制作完一本书真感觉有点自虐,但想到园子里有千千万万这样的学子,所谓我不入地狱谁入地狱。本人制作方式比较老土,如果您有好的快速的制作方法,希望您能提出宝贵意见。
后期会陆续提供其他类型开发电子书,敬请期待。
下载方式:
谢谢网友rabow(183717506)的建议,现已统一把连接上传到QQ群,后续书籍的制作上传,统一放在群(群号:288145526)里,敬请期待。当然,你要采用下面的三种方式向我索要,当然也可以。
目前索要的人比较,给您带来的不便,请理解。
(1)如果是加Q请你主动联系我,我好做记录并一一回复;
(2)如果您是留电子邮箱,一段时间内我会统一发送,还得请您耐心等会儿。中间如果有遗漏或者你想马上要,请直接Q我。
(3)如果您也有115网盘,直接点击http://115.com/?ct=rar&pickcode=e4bcc8qi下载
如果你需要用别的方式下载,可以联系我QQ。
分类: 书籍分享