前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >remoting项目运用

remoting项目运用

作者头像
MaybeHC
发布2024-04-23 19:04:39
1030
发布2024-04-23 19:04:39
举报
文章被收录于专栏:技术之路技术之路

上次写了remoting 的简单运用,在项目中我们服务端与客户端肯定不会去直接调用一个类,一般都是通过接口。下面我将自己项目里的一部分代码截取出来,进行讲解首先编写接口

编写接口

代码语言:javascript
复制
namespace YTKJ.Security.Interface
{
    public interface IMachineControlService
    {
        void OpenDoor(string door, string direction);
    }

为了简单理解,接口中只写了一个方法,下来我在服务端将实现这个接口。

实现接口

代码语言:javascript
复制
 namespace PSIMS.Machine.Control
    {
        public delegate void OpenDoorEventHandler(string door, string direction);
        [Serializable]
        class MachineControlService : MarshalByRefObject,IMachineControlService
        {
            public static event OpenDoorEventHandler OpenDoorEvent;
    
            /// <summary>
            /// 重载初始化生命周期,改为永久
            /// </summary>
            /// <returns></returns>
            public override object InitializeLifetimeService()
            {
                return null;
            }
            public void OpenDoor(string door, string direction)
            {
    
                    if (OpenDoorEvent != null)
                    {
                        OpenDoorEvent(door ,direction); 
                    }
            }
        }
    }

在这里首先实现类需要实现MarshalByRefObject接口,为OpenDoor方法设置了事件和委托。下来我们看看服务端应该怎么注册remoting服务。

注册Remoting服务

代码语言:javascript
复制
            TcpServerChannel channels;
            channels = new TcpServerChannel(20001);
            ChannelServices.RegisterChannel(channels, false);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(MachineControlService), "YTKJ.Security.Interface.IMachineControlService", WellKnownObjectMode.Singleton);
            MachineControlService.OpenDoorEvent += new OpenDoorEventHandler(MachineControlService_OpenDoor);
        /// <summary>
        /// 打开门操作
        /// </summary>
        /// <param name="door"></param>
        /// <param name="direction"></param>
        private void MachineControlService_OpenDoor(string door, string direction)
        {
           //这里写你的操作
        }

这样服务端做的事情就完成了,下来我们看看客户端怎么调用

客户端调用

代码语言:javascript
复制
            IMachineControlService a;
            a= (YTKJ.Security.Interface.IMachineControlService)Activator.GetObject(typeof(YTKJ.Security.Interface.IMachineControlService), "tcp://192.168.11.10:20001/YTKJ.Security.Interface.IMachineControlService");
            a.OpenDoor("","");

客户端的调用很简单,声明接口,使用方法获得远程调用接口,调用接口中的方法。这里有个需要注意的问题,在客户端调用的类型YTKJ.Security.Interface.IMachineControlService一定要与服务端的命名空间和接口名一致,否则客户端会报无法加载类型的异常 这样启动项目远程调用就完成了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编写接口
  • 实现接口
  • 注册Remoting服务
  • 客户端调用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档