cad.net 跨进程通讯Remoting
2021/7/10 7:05:44
本文主要是介绍cad.net 跨进程通讯Remoting,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
cad跨进程通讯Remoting
正在研究cad的跨进程通讯,
难点在于cad是服务端的话,需要将服务端的函数给暴露出来,让客户端直接调用,而暴露的时候最好只是暴露接口,不暴露函数实现.
如下就可以进行了.
工程结构
1.服务端工程 --> cad的类库,透过cad调用 --> 引用端口工程
2.客户端工程 --> 控制台工程 --> 引用端口工程
3.端口工程 --> 类库
1.服务端工程
#if !HC2020 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Acap = Autodesk.AutoCAD.ApplicationServices.Application; #else using GrxCAD.ApplicationServices; using GrxCAD.DatabaseServices; using GrxCAD.EditorInput; using Acap = GrxCAD.ApplicationServices.Application; #endif using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using System; using JoinBox.IAdapter; namespace JoinBox.Service { public class Remoting { /// <summary> /// 注册服务管道remoting,实现占用端口 /// </summary> [JoinBoxInitialize] public void RegisterServerChannel() { var channel = new TcpServerChannel(AdapterHelper.Port); ChannelServices.RegisterChannel(channel, false); RemotingConfiguration.RegisterWellKnownServiceType( typeof(BaseService), //服务端对接口的实现 nameof(IJoinBoxAdapter), //客户端调用的公共接口,例如此处末尾:tcp://localhost:15341/IJoinBoxAdapter WellKnownObjectMode.Singleton); } } // 实现公共接口,在cad命令栏打印 public class BaseService : MarshalByRefObject, IJoinBoxAdapter { public void PostAcedString(string str) { AutoGo.SyncManager.SyncContext.Post(() => { Document doc = Acap.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; ed.WriteMessage(str); }); } } }
2.客户端工程 JoinBox.Client
using System; using System.Threading; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using JoinBox.IAdapter; namespace JoinBox.Client { public class Program { public static void Main(string[] args) { ChannelServices.RegisterChannel(new TcpClientChannel(), false); var remoteobj = (IJoinBoxAdapter)Activator.GetObject(typeof(IJoinBoxAdapter), AdapterHelper.TcpPortStr); while (true) { var str = DateTime.Now.ToString() + "\n"; Console.WriteLine(str); remoteobj.PostAcedString(str); Thread.Sleep(1000); } } } }
3.接口工程 JoinBox.IAdapter
此工程同时暴露给服务端和客户端利用
namespace JoinBox.IAdapter { //暴露出去的接口 public interface IJoinBoxAdapter { public void PostAcedString(string str); } //公共占用的东西 public class AdapterHelper { public static int Port = 15341; public static string TcpPortStr = $"tcp://localhost:{Port}/" + nameof(IJoinBoxAdapter); } }
(完)
这篇关于cad.net 跨进程通讯Remoting的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具