C# NetRemoting配置详解与优劣分析

需积分: 7 0 下载量 23 浏览量 更新于2024-09-13 收藏 48KB DOC 举报
“netremoting笔记”讨论了C# Remoting的配置方法以及其优缺点,主要涉及了服务器激活和客户端激活的配置细节。 C# Remoting是.NET Framework提供的一种技术,用于实现跨应用程序域(AppDomain)的通信,使得不同进程甚至不同计算机上的对象能够像在同一个进程中一样进行交互。在本文档中,我们关注的是如何配置C# Remoting服务端和客户端,以及在IIS环境下设置Remoting服务。 1. 服务器激活配置: - 在IIS中创建一个虚拟目录,例如“remotingtest”,并将其指向实际的物理路径,如“d:\Test\"。 - 在这个物理路径下创建一个“bin”目录,并将相关的DLL文件放入其中。 - 修改Web.config文件,配置服务器激活的服务。例如,使用`<wellknown>`元素指定单例(SingleCall)或单例(Singleton)模式的服务类型。服务类型由两部分组成:类名(如“RemotingTestSrv.RemotingTestSrv”)和程序集名称(如“RemotingTestSrv”)。`objectUri`属性定义了对象的URI,用于客户端访问。 ```xml <configuration> <system.runtime.remoting> <application> <service> <wellknown mode="SingleCall" objectUri="RemotingTestSrv.rem" type="RemotingTestSrv.RemotingTestSrv, RemotingTestSrv" /> </service> </application> </system.runtime.remoting> </configuration> ``` 2. 配置多个服务: - 如果需要添加多个服务,可以继续在`<service>`元素下添加更多的`<wellknown>`元素,如示例中的“WiseOwl.Calculator”。 ```xml <service> <wellknown mode="SingleCall" type="WiseOwl.Calculator, MathObjects" objectUri="EphemeralCalc" /> <wellknown mode="Singleton" type="WiseOwl.Calculator, MathObjects" objectUri="SharedCalc" /> </service> ``` 3. 配置通道(Channels): - `channels`元素用于定义服务使用的通信协议,如HTTP或TCP。在例子中,创建了两个通道,一个监听9000端口的HTTP通道,另一个监听4242端口的TCP通道。 ```xml <channels> <channel port="9000" ref="http" /> <channel port="4242" ref="tcp" /> </channels> ``` 4. 客户端激活配置: - 客户端配置同样需要修改其应用程序的配置文件,以连接到服务器上激活的服务。这通常包括指定服务器的URL、服务的URI以及使用的通道。 未在摘要中提供的客户端配置部分通常会包含类似以下的代码: ```xml <configuration> <system.runtime.remoting> <clientRuntime> <!-- 配置服务器的URL和其他相关信息 --> </clientRuntime> <application> <!-- 可能会包含对服务器上服务的引用 --> </application> </system.runtime.remoting> </configuration> ``` C# Remoting的优点包括: - 跨进程通信:允许对象在不同的应用程序域之间交互,提高了系统的可扩展性和模块化。 - 异步调用:支持异步调用,提高了性能和用户体验。 - 自动序列化和反序列化:自动处理对象的序列化和反序列化,简化了数据交换。 缺点包括: - 性能开销:相比其他通信技术如WCF,Remoting可能有更高的性能开销。 - 不支持跨平台:只适用于.NET环境,无法在非.NET平台上运行。 - 技术过时:随着WCF和ASP.NET Core等更现代技术的出现,Remoting逐渐被淘汰。 总结来说,C# Remoting是.NET Framework早期用于实现分布式系统的一种技术,虽然现在有其他更先进的解决方案,但在理解.NET框架历史和处理旧系统时,了解Remoting仍然是必要的。