.Net远程方法调用研究

使用Remoting和Activator在.NET中实现远程方法调用 NET Remoting 是微软提供的一个用于远程对象通信的技术,它允许对象跨越应用程序域和进程边界进行通信。这项技术自.NET Framework早期版本便存在,为分布式应用开发提供了便利,尤其是在不同网络节点上运行的组件间进行方法调用。在.NET Remoting框架中,要创建一个可远程访问的对象类,首先需要了解该对象类需要继承自特定的基类。通常情况下,这个基类是,它提供了远程对象所必需的代理机制,使得对象可以跨越应用程序域边界进行通信。 阅读详情
简介
远程方法调用发展到现在,已经有以下几种框架实现:DCE/RPC,CORBA,DCOM,MTS/COM+,Java RMI,Java EJB,Web Services/SOAP/XML-RPC,NET Remoting,本文主要介绍了.NET远程方法调用的原理,实现以及与微软COM/DCOM实现的异同点。

框架
Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。众所周知,Web服务仅仅提供了一种简单的容易理解的方法来实现跨平台,跨语言的交互,而DotNet Remoting相对于Web服务就像Asp相对于CGI那样,实现了一种质的转变。DotNet Remoting提供了一个可扩展的框架,它可以选择不同的传输机制(HTTP和TCP是内置的),不同的编码方式(SOAP以及二进制代码),安全设置(IIS或SSL),同时提供了多种服务,包括激活和生存期支持。

远程方法调用
对于远程方法调用来说,最直接的问题恐怕是:一个本地方法,推而广之,一个本地对象,如果放在网络环境中,如何传递这个方法的调用,返回,如何传递这个对象的请求。虽然对于应用开发人员来说这个并不是必不可少的事,但对于我们学习分布式操作系统来说,我想这是应该搞清楚的。我们知道,DCOM协议也被称为对象RPC,它建立在DCE RPC协议基础上,也就是说,在网络传输这一层,它必须使用特殊的协议。另外Windows RPC 机制要求熟悉的类型和使用 IDL 工具的封送处理知识,并向开发人员公开 RPC 客户端和服务器存根的管理。Remoting 在为 .NET 提供 RPC 时要容易得多,而且由于使用简单易懂的 .NET 数据类型,从而消除了早期 RPC 机制中存在的类型不匹配的情况(这是一个非常大的威胁)。配置为使用 HTTP 或 TCP 协议,并使用 XML 编码的 SOAP 或本机二进制消息格式进行通信。开发人员可以构建自定义的协议(通道)或消息格式(格式化程序),并在需要时由 Remoting 框架使用。服务器和客户端组件都可以选择端口,就象可以选择通信协议一样。由此带来的一个好处是,很容易建立并运行基本的通信。

下图中描述了.Net Remoting的五要素:

代理:在Client端伪装为Remote Objects并转发对Remote Objects的调用。

Message:消息对象包含了执行Remote Methods调用的必要数据参数。

Message Sink/Channel Sink:在Remote调用中,Message Sink允许定制消息处理流程,这是.Net Remoting内置的可扩展特性。

Formatter:也是Message Sink,用来序列化消息,已适于网络传输,如SOAP。

Transport Channel:也是Message Sink,用来传输序列化的消息到远程进程,如HTTP。

当访问Remote Objects时,Client端application并不处理真实对象的引用,而是仅仅调用Proxy对象的方法。Proxy对象提供与Remote Objects相同的接口,伪装成Remote Objects。Proxy对象自己并不执行任何方法,而是以消息对象(Message Object)的形式转发每一个方法调用给.Net Remoting Framework。

在类型支持方面,DCOM提供了一套复杂的列集和散集机制,他建立在RPC的基础上。由于RPC被定义为DCE标准的一部分,而DCE RPC定义了所有常用的数据类型的数据表达方法,即网络数据表示法。为了使存根(stub)代码和代理对象能够正确地对参数和返回结果也进行列集和散集,它们应该使用一致的数据表示法NDR,以便在不同的操作系统环境下也能够远程调用。



This figure is from the book named Advanced .Net Remoting.

反过来,我们再看看.NET Remoting 强大的类型操作,.Net Remoting 支持所有托管的类型、类、接口、枚举、对象等,这通常被称为“多类型保真”。这里的关键在于,如果客户端和服务器组件都是在应用程序域中运行的 CLR 托管的对象,则数据类型的互操作是不成问题的。从根本上讲,我们拥有的是一个封闭的系统,会话的两端可以完全被理解,因此我们可以充分利用这一事实,处理好用于通信的数据类型和对象。

在各种系统并存的情况下,我们需要考虑系统之间的互操作性。对于可互操作的数据类型,我们要谨慎处理。例如,Web 服务数据类型的定义要基于 XML 架构定义 (XSD) 关于数据类型的说明。任何可以使用 XSD 进行描述并可以在 SOAP 上进行互操作的类型都可以使用。但是,这也确实使得某些数据类型不能使用。

代理
代理对象伪装成一个远程对象,并且向本地提供远程对象相同的接口。客户端应用程序与处理远程“真实”对象的应用(包括内存引用,指针,等等),都是通过代理对象实现的。代理对象当然并不自己完成方法调用,它将请求作为消息对象传给.NET Framework。在这一方面,.Net Remoting 和DCOM思想上是一致的。当某个客户端激活一个远程对象时,框架将创建 TransparentProxy 类的一个本地实例(该类中包含所有类的列表与远程对象的接口方法)。因为 TransparentProxy 类在创建时用 CLR 注册,所以代理上的所有方法调用都被运行时截取。这时系统将检查调用,以确定其是否为远程对象的有效调用,以及远程对象的实例是否与代理位于同一应用程序域中。如果对象在同一个应用程序域中,则简单方法调用将被路由到实际对象;如果对象位于不同的应用程序域中,将通过调用堆栈中的调用参数的 Invoke 方法将其打包到 IMessage 对象并转发到 RealProxy 类中。此类(或其内部实现)负责向远程对象转发消息。TransparentProxy 类和 RealProxy 类都是在远程对象被激活后在后台创建的,但只有 TransparentProxy 返回到客户端。在代理对象创建时,需要引用Client端的Messag Sink Chain,Sink Chain的第一个Sink对象的引用保存在RealProxy对象的Identity属性。如下图所示:









所以,在下面这段代码调用new或者GetObject获得对象后,对象obj将会指向

TransparentProxy对象。

HttpChannel channel = new HttpChannel();

ChannelServices.RegisterChannel(channel);

SomeClass obj = (SomeClass) Activator.GetObject(

type of(SomeClass),

"http://localhost:1234/SomeSAO.soap");

消息
当一次函数调用指向远程对象的引用时,TransparentProxy创建一个MessageData对象并且将它传给RealProxy对象的PrivateInvoke()调用,RealProxy相应地生成一个新的Message对象并且以MessageData对象为参数调用其InitFields()方法,Message将会解析MessageData对象中地指针进行相应地函数调用。当处理结束时,将会返回一个包含回应消息的IMessage对象,RealProxy将会调用它自己的HandleReturnMessage()方法,该方法检查参数并且调用PropagateOutParameters()方法。当处理结束后RealProxy将会从它的PrivateInvoke()方法中返回,IMessage将会返回给TransparentProxy。CLR保证函数返回值与其返回格式相符,所以对于应用程序来说,它仅仅认为这是一个一般方法的调用,返回,这正是分布式的最终要求。

可以看到,.NET Remoting与DCOM的底层机制已经完全不同了,DCOM的一次方法调用,需要经过列集(marshaling)和散集(unmarshaling)的处理,包括创建代理对象和转载存根代码等。但是可以看到.NET做为DCOM的下一代,在基本思想上和DCOM是一脉相承的。在我学习到现在的体会看来,.NET面向Web服务的RPC机制的确是一大革新,让我们看看IMessage怎么进行传递的:

这是一个消息穿过Transport Channel(也就是Message Sink)的实例。

首先是SOAP远程调用的HTTP请求:

POST /MyRemoteObject.soap HTTP/1.1

User-Agent: Mozilla/4.0+(compatible; MSIE 6.0; Windows 5.0.2195.0; MS .NET

Remoting;

MS .NET CLR 1.0.2914.16 )

SOAPAction:

"http://schemas.microsoft.com/clr/nsassem/General.BaseRemoteObject/General#

setValue"

Content-Type: text/xml; charset="utf-8"

Content-Length: 510

Expect: 100-continue

Connection: Keep-Alive

Host: localhost




然后是一个对于一个远程对象setValue(int):




POST /MyRemoteObject.soap HTTP/1.1

User-Agent: Mozilla/4.0+(compatible; MSIE 6.0; Windows 5.0.2195.0; MS .NET

Remoting;

MS .NET CLR 1.0.2914.16 )

SOAPAction:

"http://schemas.microsoft.com/clr/nsassem/General.BaseRemoteObject/General#

setValue"

Content-Type: text/xml; charset="utf-8"

Content-Length: 510

Expect: 100-continue

Connection: Keep-Alive

Host: localhost




<SOAP-ENV:Envelope

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:i2=

"http://schemas.microsoft.com/clr/nsassem/General.BaseRemoteObject/General">

<SOAP-ENV:Body>

<i2:setValue id="ref-1">

<newval>42</newval>

</i2:setValue>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>





看起来是多么美妙的形式啊,完全摆脱了分析RPC时的痛苦,不过我始终还是有疑问,微软如果始终坚持windows操作系统一统的路线,.NET的真正跨平台性是否真正能实现。

一种常见的 Microsoft 理论是:如果需要在不同系统之间进行互操作,应该选择使用开放标准 (SOAP、XML、HTTP) 的 Web 服务方法,而使用 .NET Remoting 决不是一种交互的解决方案;如果各种系统中的所有组件都是 CLR 托管的,则 .NET Remoting“可能”是正确的选择。

我想我还漏了一个重要的问题:串行化(Serialization)。这是实现跨进程调用的关键技术。在COM中串行化使通过列集(marshaling)和散集(unmarshaling)完成的,列集过程的复杂程度因参数类型而异,简单的入WORD或float只需按二进制序列填到数据包中,复杂的参数如指针需要考虑整个指针层次,获得所有的数据全部。散集是和列集向对应的过程,远程机器的存根代码接受到列集数据后,重新建立堆栈的过程就是散集,每次远程调用至少经过两次列集和两次散集,因为返回值也需要列集回来再散集。COM的一个问题就是在于其过于复杂的的参数传递问题这一套复杂的机制是很难搞明白,更何况对于代码的定制了。.NET Remoting对于串行化的处理是通过一个formatter来完成的,.NET Remoting框架给你提供了两个缺省的formatters,SoapFormatter和BinaryFormatter,它们都能通过HTTP或TCP进行传输。在消息完成了ImessageSink对象的预处理链后,它将通过SyncProcessMessage()到达formatter。在客户端,SoapClientFormatterSink将IMessage传给SerializeMessage()方法。这个函数设置TransportHeaders,请求它的NextSink(HttpClientTransportSink ),它将创建一个ChunkedMemoryStream并且传给channel sink.。真正的串行化由CoreChannel.SerializeSoapMessage()开始,它建立一个SoapFormatter,并且调用其Serialize()方法,下面是一个对于obj.setValue(42)方法的SOAP输出

<SOAP-ENV:Envelope

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:i2="http://schemas.microsoft.com/clr/nsassem/General.BaseRemoteObj ***

ect/General">

<SOAP-ENV:Body>

<i2:setValue id="ref-1">

<newval>42</newval>

</i2:setValue>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>





这种方式与COM比较更加清晰,易懂,并且也确实易于开发,例如我们可以实现一个压缩的Sink。下面是开发一个CompressionSink的骨架例程,从这来看,COM实在是望尘莫及。

using System;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Messaging;

using System.IO;




namespace CompressionSink

{

public class CompressionClientSink: BaseChannelSinkWithProperties,

IClientChannelSink

{

private IClientChannelSink _nextSink;




public CompressionClientSink(IClientChannelSink next)

{

_nextSink = next;

}

public IClientChannelSink NextChannelSink

{

get {

return _nextSink;

}

}




public void AsyncProcessRequest(IClientChannelSinkStack sinkStack,

IMessage msg,

ITransportHeaders headers,

Stream stream)

{

// TODO: Implement the pre-processing




sinkStack.Push(this,null);

_nextSink.AsyncProcessRequest(sinkStack,msg,headers,stream);

}

public void AsyncProcessResponse(IClientResponseChannelSinkStack sinkStack,

object state,

ITransportHeaders headers,

Stream stream)

{

// TODO: Implement the post-processing




sinkStack.AsyncProcessResponse(headers,stream);

}




public Stream GetRequestStream(IMessage msg,

ITransportHeaders headers)

{

return _nextSink.GetRequestStream(msg, headers);

}




public void ProcessMessage(IMessage msg,

ITransportHeaders requestHeaders,

Stream requestStream,

out ITransportHeaders responseHeaders,

out Stream responseStream)

{

// TODO: Implement the pre-processing




_nextSink.ProcessMessage(msg,

requestHeaders,

requestStream,

out responseHeaders,

out responseStream);




// TODO: Implement the post-processing

}

}

}

小结
以上就是我几天来对.NET Remoting的学习所得。我的学习主要集中在.NET Remoting的远程方法传递这方面,因为我觉得这才是RPC最关键的技术。从几天的学习所得,可以看出.NET FrameWork的确是一种技术,思想都非常先进的框架。我唯一的怀疑在于微软所谓的平台无关性,这方面,JAVA也许永远胜出一筹。
 
VB.NET中的.NET远程处理事件详解 远程对象是.NET Remoting框架中的核心概念。它们是能够在不同应用程序域或不同计算机之间进行通信的对象。远程对象的生命周期包括创建过程和生命周期管理,这是确保远程对象正确初始化和清理的关键。自定义远程对象是扩展.NET Remoting功能的基础,它需要从MarshalByRefObject继承,并且可以自定义远程类的特定行为。 阅读详情

相关推荐

掌握.NET远程对象的调用与部署策略

本文介绍了.NET环境中远程对象的调用方式,包括同步调用、异步调用和单向调用,并深入探讨了如何通过配置文件和IIS部署远程服务,以提高软件的健壮性和可管理性。文中还提供了在Windows服务中托管远程对象的示例代码,以及使用soapsuds工具从远程对象提取元数据并生成DLL的方法。

weixin_29781865的博客 448

WPF 从零开始开发 dotnet Remoting 程序

本文告诉大家如何不使用框架,从零开始开发一个 dotnet remoting 程序

lindexi 999

Microsoft .Net Remoting系列教程之一:.Net Remoting基础篇

本文主要讲解.Net Remoting的基础,需要的朋友可以参考下。

第 11 章 – .NET Remoting 安全性[转]

原文:http://www.microsoft.com/china/technet/security/guidance/secmod11.mspx 本页内容 本章内容 目标 适用范围 如何使用本章内容 .NET Remoting 体系结构 .NET Remoting 网关守卫 身份验证 授权 ...

aobc72208的博客 316

扬声器设计避坑指南:用Comsol分析反电动势对THD的影响(附案例文件)

本文深入探讨了扬声器设计中反电动势对总谐波失真的关键影响。通过COMSOL仿真,详细分析了BL值非线性、音圈电感变化等电磁-力-声耦合机制,并提供了从参数化建模到系统级优化的实战指南,帮助工程师精准量化并降低谐波失真,提升扬声器音质。

xx56789的博客 521

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1987

浅谈.net remoting 与webservice

1. .NET Remoting   .NET Remoting是微软随.NET推出的一种分布式应用解决方案,被誉为管理应用程序域之间的 RPC 的首选技,它允许不同应用程序域之间进行通信(这里的通信可以是在同一个进程中进行、一个系统的不同进程间进行、不同系统的进程间进行)。   更具体的说,Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框...

weixin_34038652的博客 264

Simpack实战:5分钟搞定轨道车辆车轮不圆的3种定义方法(附详细参数设置)

本文详细介绍了在Simpack中定义轨道车辆车轮不圆的3种高效方法:Radius deviations、Fourier coefficients和Harmonic function,并提供了详细的参数设置指南。通过实战案例和参数优化技巧,帮助工程师快速掌握车轮不圆度的定义与仿真,提升轨道车辆动力学分析的准确性和效率。

weixin_29292535的博客 202

关于.Net Remoting 的一个简单示例

我对.Net Remoting 是从2002年就已经知道这个说法了。但是一直很害怕这个怪物。因为每次想试图去搞清楚它的时候,一看他的那么多页的文档,我是看不下去了.因为他总是先告诉你很多恐怖的概念,中间夹杂一些"断章取义"的代码,从来就没有一个完整的代码. 所以总是这样虎头蛇尾的.估计大家也有很多人是这样子的. 今天我不跟大家说概念了.  .Net Remoting 整个框架分成三部分:1. 服务...

weixin_34261415的博客 217

4.4 线上vs离线:使用 Langfuse 实现智能体的全方位无死角评估

本文介绍了如何利用Langfuse工具实现AI智能体的全方位评估,包括线上和离线两种评估方式。线上评估通过收集用户实时反馈(如点赞/点踩)来监控真实表现,而离线评估则通过创建标准化数据集进行批量测试和自动评分。文章详细演示了如何为"旅小智"AI应用添加反馈功能、创建评估数据集,并利用Langfuse SDK进行自动化评估和分析。通过这两种评估方式的结合,开发者可以建立数据驱动的AI质量保障体系,实现持续优化和版本迭代。

yonggeit的博客 3312

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1368

.net core 高吞吐远程方法调用组件XRPC

XRPC的目标非常明确,就是给.net core平台实现一个百万级别的远程方法调用RPC通讯组件。它的设计理念和GRPC一样,基于连接复用的机制实现高吞的性能;XRPC采用了HTTP2复用的思想,在协议设计上也类似文本和二进制相结合;在应用层面并没使用消息而是基于接口代理的方式让使用更简便。 协议序列化 XRPC采用了基于文本+二进制相结合的通讯协议,头以文本的方式表现主要是描述请求...

dcnna0422的博客 286

一般无穷积分的收敛判别法

文章目录积分里的狄屎判别法证明阿贝尔判别法总结补充:级数中的狄屎和Abel 积分里的狄屎判别法 F(u)=∫auf(x)dx在[a,+∞)F(u)=\int_a^uf(x)dx在[a,+\infty)F(u)=∫au​f(x)dx在[a,+∞)有界 x→+∞时,g(x)单减→0x\to+\infty时,g(x)单减\rightarrow0x→+∞时,g(x)单减→0 ⇒\Rightarrow⇒ ...

universe_1207的博客 1万+

ASP.NET Core远程验证:异步验证调用

在现代Web应用开发中,表单验证是确保数据完整性和用户体验的关键环节。ASP.NET Core提供了强大的远程验证(Remote Validation)功能,允许开发者在客户端进行异步验证调用,无需刷新页面即可实时验证用户输入。本文将深入探讨ASP.NET Core远程验证的实现原理、使用方法和最佳实践。 ## 远程验证的核心概念 ### 什么是远程验证? 远程验证是一种客户端异步验证技术,...

gitblog_01045的博客 1053

Microsoft Forms功能深度解析:企业数据收集与协作的智能利器

Microsoft Forms是微软365生态中的在线表单工具,支持问卷调查、测验和投票创建,具备拖拽式界面、多题型设计和实时数据分析功能。其核心价值在于易用性、跨平台兼容性以及与Teams、SharePoint等微软服务的深度集成,满足GDPR/HIPAA等合规要求。提供表单创建、权限管理、自动化流程(通过Power Automate)和审计日志等功能,适用于金融、医疗、教育等多行业场景。虽然存在逻辑分支有限等约束,但通过案例证明能显著提升数据收集效率(达70-85%)。使用时需注意许可证配置(Busin

xueyunshengling的博客 9125

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

使用.net 2.0调用远程WCF服务

使用.net 2.0调用远程WCF服务,即把WCF服务当成一个web service服务来调用。但是因为WCF封装问题,特别是发布到远程服务器上的WCF,使用客户端调用还真出现不少问题。 下面用三个方面来阐述这个问题:WCF服务端、生成客户端代理文件、出现的问题 一、WCF服务端 因为使用的是2.0调用WCF服务,所以把binding配置成basicHttpBinding,即使用简单的HTT

巴朗鱼 4429

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

.Net调用远程Webservice的方法小结

最近在项目中需要调用别的服务器上的web服务,一直写服务供别人调用的我,感觉应该没有问题,但真正去做的时候还是有点懵,现在把这次经历记录下来,希望可以帮到跟我有一样困扰的童鞋..... 以下为具体实现步骤: 1、在项目中添加服务引用,地址是别人提供给你的服务地址,如下图所示: 2、添加服务引用之后,项目资源文件中会生成一个App_WebReferences文件夹以及相关子文件夹,你添

侧耳倾听 3248

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NET 世界中的远程脚本

NET 世界中的远程脚本 Andrew ClinickMicrosoft Corporation 2001年11月12日 查看示例 service_vb.htm(英文)查看示例 service_jscript.htm(英文)查看 clsWeatherVB.asmx 的代码(英文)查看 clsWeatherJScript.asmx 的代码(英文)2000 年 3 月,我写了一篇文章,介绍

sonicdater的专栏 1006

.Net调用远程方法及实例

封装方法如下: /// <summary> /// 远程Api调用 /// </summary> /// <param name="url">远程Api地址</param> /// <param name="headers">请求头</param> /// <param name="param">请求参数</param&gt

weixin_43343835的博客 643

远程方法回调(.Net Remoting学习四)

1.应用程序域(.Net Remoting学习一) 2.基本操作(.Net Remoting学习二) 3.分离服务程序实现(.Net Remoting学习三) 4.远程方法回调(.Net Remoting学习四)         Remoting中的方法回调 1. 远程回调方式说明 远程方法回调通常有两种方式: 客户端也存在继承自MarshalByValueObject的

行游客的专栏 1466

ASP.NET如何获取远程图片

ASP.NET 实现通过URL 获取远程的图片或者文件方法。我们可以创建System.Net.WebClient 对象  通过 DownloadFile() 方法来获取远程图片或者文件 。  具体实现如下using System;using System.Data;using System.Configuration;using System.Collections;using Sys

夏风鱼的专栏 841

关于.NET中动态调用Web Service服务的方法心得。

介绍.NET中动态调用Web Service的相关技术文章。在.NET中调用Web Service服务(WSDL)有两种可行的方法:1、通过Web 服务引用,在本地生成所要调用服务的类;(静态方法)2、通过给定的WSDL服务地址,动态生成Web Service服务类进行服务调用;(动态方法)由于1中的方法大部分人都会经常用到,因此暂不讨论。对于2,实现上较为复杂,主要的过程为:(1)读

显斌的技术Blog 7864

方法调用_BeetleX高吞吐远程方法调用模块XRPC

XRPC的目标非常明确,在.net core平台实现一个百万级别的远程方法调用RPC通讯组件。它的设计理念和GRPC一样,基于连接复用的机制实现高吞的性能;XRPC采用了HTTP2复用的思想,在协议设计上也类似文本和二进制相结合;在应用层面并没使用消息而是基于接口代理的方式让使用更简便。协议序列化XRPC采用了基于文本+二进制相结合的通讯协议,头以文本的方式表现主要是描述请求的位置和附加...

weixin_39963174的博客 280
上一篇: 浅析WebService客户端应用方法
下一篇: web service 和 remoting 有什么区别
NETZHOU
博客等级 码龄24年 10粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值