Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net NET中的IPC API库_.net_Dll_Interface_Ipc_Publishing - Fatal编程技术网

.net NET中的IPC API库

.net NET中的IPC API库,.net,dll,interface,ipc,publishing,.net,Dll,Interface,Ipc,Publishing,我用.NET C#编写了桌面应用程序A1.exe,我想创建类似于A1API.dll的东西,其他第三方应用程序可以使用它与我的应用程序A1.exe进行进程间双向通信 我已经有了一些基于IPC远程处理的A1API.dll原型。在dll中,有一个Client.cs MarshallByRefObject类,它包含自己的线程,通过每秒检查一次来保持与Server.cs MarshallByRefObject类实例的连接。这种构造允许我的A1.exe应用程序重新启动,并自动重新连接服务器中注册的用于侦听A

我用.NET C#编写了桌面应用程序A1.exe,我想创建类似于A1API.dll的东西,其他第三方应用程序可以使用它与我的应用程序A1.exe进行进程间双向通信

我已经有了一些基于IPC远程处理的A1API.dll原型。在dll中,有一个Client.cs MarshallByRefObject类,它包含自己的线程,通过每秒检查一次来保持与Server.cs MarshallByRefObject类实例的连接。这种构造允许我的A1.exe应用程序重新启动,并自动重新连接服务器中注册的用于侦听A1.exe事件的所有客户端。此外,若任何客户端应用程序意外关闭,服务器会将其从客户端集合中删除,因为即使调用方法client.Equals,它也会开始抛出错误。我用ClientWrapper.cs类解决了这个问题

这一切都很有效

比方说,库A1API.dll将作为我的A1.exe应用程序的API发布在internet上

现在,我有一个问题。如果我将来需要更改A1API.dll并扩展某些public Server.cs方法中使用的枚举,该怎么办?在这种情况下,我应该使用字符串类型吗

在使用枚举的场景中,我将扩展A1.exe和A1API.dll并发布它,然后如果只重新安装A1.exe,则依赖于A1API.dll的所有客户端都将中断

对于整个问题,什么是最佳解决方案?


我也将非常感谢您对我的IPC解决方案的任何改进/更改。谢谢。

答案取决于您希望向后兼容的程度

您可能会发布强命名程序集(即签名程序集),并在每次API更改时更改程序集版本,因此新程序集将无法与旧程序集一起使用。另外,强名称程序集可以放在GAC中,因此这是一个好主意

您可以让程序集保持未签名和/或未版本化状态,而是使用新的或修改过的方法添加新的客户端类。所以你会有Client100,Client101,Client203类。也许你可以玩wiith继承,但我个人建议你不要玩

第一种方法允许您标记新版本/行为更改,即使方法签名未更改。第二种方法是在不破坏源代码级兼容性的情况下添加新功能并允许根据新版本编译旧代码的唯一方法

我想说两者兼得很好。GAC中的强名称程序集、每次更改时的版本增量以及新方法的新类