Remoting如何测试

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

10年的铁东网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整铁东建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“铁东网站设计”,“铁东网站推广”以来,每个客户项目都认真落实执行。

1. RemoteObject.cs

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

using System;
using System.Collections.Generic;

namespace MessageObject
{
   public class RemoteObject : MarshalByRefObject
   {
       public static Queue qMessage { get; set; }

       public string SendMessage(string message)
       {
           if (qMessage == null)
           {
               qMessage = new Queue();
           }
           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 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,客户端定义为List,这样也是不行的。

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


网站栏目:Remoting如何测试
转载来源:http://azwzsj.com/article/jepeeh.html