温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Remoting如何测试

发布时间:2022-05-23 15:57:05 阅读:179 作者:iii 栏目:大数据
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇内容介绍了“Remoting如何测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. RemoteObject.cs

服务端与客户端通信对象,尽量放在一个共享库中,需要继续MarshalByRefObject类

using System;using System.Collections.Generic;namespace MessageObject{    public class RemoteObject : MarshalByRefObject    {        public static Queue<string> qMessage { get; set; }        public string SendMessage(string message)        {            if (qMessage == null)            {                qMessage = new Queue<string>();            }            qMessage.Enqueue(message);            return message;        }    }}

2. 服务端测试代码

单独建立一个控制台工程,引入带有上面通信对象的共享库,注册Remoting通道,开启Remoting服务,等待客户端调用。

using MessageObject;using System;using System.Collections.Generic;using System.Runtime.Remoting;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting.Channels.Ipc;using System.Threading;namespace IPCServer{    class Program    {        static void Main(string[] args)        {            StartServer();            Thread thread = new Thread(new ThreadStart(ReceviceMessage));            thread.Start();        }        private static void StartServer()        {            IpcServerChannel channel = new IpcServerChannel("ServerChannel");            ChannelServices.RegisterChannel(channel, false);            RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "RemoteObject", WellKnownObjectMode.SingleCall);            Console.WriteLine("消息服务启动...");        }        private static void ReceviceMessage()        {            while (true)            {                Queue<string> qMessage = RemoteObject.qMessage;                if (qMessage != null)                {                    if (qMessage.Count > 0)                    {                        string message = qMessage.Dequeue();                        Console.WriteLine("接收消息是:" + message);                    }                }                Thread.Sleep(1000);            }        }    }}

3. 客户端测试代码

单独建立一个客户端测试控制台工程,连接服务端Remoting服务,调用服务端通信对象,达到访问服务端的目的

using MessageObject;using System;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting.Channels.Ipc;namespace IPCClient{    class Program    {        static void Main(string[] args)        {            RemoteObject objRemoteObject = ConnectServer();            Send(objRemoteObject);        }        private static void Send(RemoteObject objRmoteObject)        {            while (true)            {                Console.WriteLine("请输入消息...");                string message = Console.ReadLine();                try                {                    objRmoteObject.SendMessage(message);                    Console.WriteLine("发送成功");                }                catch (Exception ex)                {                    Console.WriteLine($"无法连接到消息服务:{ex.Message}");                }            }        }        private static RemoteObject ConnectServer()        {            IpcClientChannel channel = new IpcClientChannel();            ChannelServices.RegisterChannel(channel, false);            RemoteObject objRemoteObject = (RemoteObject)Activator.GetObject(typeof(RemoteObject), "ipc://ServerChannel/RemoteObject");            return objRemoteObject;        }    }}

通信对象如果必须放在两个不同的解决方案或者工程中,当客户端无法访问服务端远程对象时,比如提示:“连接到 IPC 端口失败: 系统找不到指定的文件。”,可使用此demo测试:

  • 服务端是否先于客户端开启?

  • 尝试检查两端通信对象命名空间一致吗?比如服务端远程对象命令空间定义为:namespace MessageObjectServer,客户端为:namespace MessageObjectClient,这样肯定不行的

  • 通信使用的属性定义相同吗?比如都要使用这个属性:public static Queue qMessage { get; set; },服务端定义为Queue<string>,客户端定义为List<string>,这样也是不行的。

“Remoting如何测试”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/dotnet9/blog/4442767

AI

开发者交流群×