您的位置: 旅游网 > 时尚

[冷枫]RemotingIIS承载方式_a

发布时间:2020-01-16 19:50:40

这里来说一下iis承载方式,顺便简单说一下remoting的通道和【复杂对象】中的遗留问题。

首先明确一点:iis来承载的话只能是http通道方式的。

我们来建立一个web项目,比如叫remoting,删除项目中的所有webform,把远程对象dll-RemoteObject.dll复制到项目的dll文件夹下面,然后打开web.config进行服务端设置: <configuration>

<appSettings>

<addkey="strconn"value="server=(local);uid=sa;pwd=;database=UBISOFT"/>

</appSettings>

<system.runtime.remoting>

<application>

<service>

<wellknowntype="RemoteObject.MyObject,RemoteObject"objectUri="MyObject.soap"

mode="SingleCall"/>

</service>

<channels>

<channelref="http"/>

</channels>

</application>

</system.runtime.remoting>

</configuration>

来分析一下这个config:

1、可能大家还不是很理解type属性,其实type属性分两部分<命名空间.类名>,<程序集>

2、objectURi是用来表示对象的uri的,到时候我们用这个uri来连接到服务端

3、我们需要为uri指定soap(soap格式化)或者rem(二进制格式化)后缀

要进行测试其实很简单,我们在浏览器输入:http://localhost/remoting/MyObject.soap?wsdl

进行测试,如果发生问题基本就是配置文件的问题或者对象dll没有正确复制到dll目录

接下来修改一下客户端的配置文件就可以了,主要是修改地址。

<configuration>

<appSettings>

<addkey="ServiceURL"value="http://localhost/remoting/MyObject.soap"/>

</appSettings>

</configuration>

iis承载方式默认是80端口,我们不需要在端口上做任何设置。还需要注意到的是iis方式,我们使用这样的格式作为地址:

http://ip地址/虚拟目录/远程对象.soap

运行了客户端以后如果我们的数据量比较大的话,就算是本机我们也能感受到延迟,比tcp方式延迟厉害很多很多,其实http方式的remoting效率比webservice还要差,具体选择http方式的remoting还是webservice还是要看我们是不是对对象的状态有需求。

iis的部署也是自动启动服务的,还有一个优点就是可以结合iis的windows身份认证,这个参照一些iis的配置文章,这里就不说了。

下面还是要来看一下两种【通道】:

默认情况下,HTTP 通道使用 SOAP 格式化程序,因此,如果客户端需要通过 Internet 访问对象,则可以使用 HTTP 通道。由于这种方法使用 HTTP,所以允许客户端通过防火墙远程访问 .NET 对象。将这些对象集成在 IIS 中,即可将其配置为 Web 服务对象。随后,客户端就可以读取这些对象的 WSDL 文件,以便使用 SOAP 与 Remoting 对象通信。

默认情况下,TCP 通道使用二进制格式化程序。此格式化程序以二进制格式进行数据的序列化,并使用原始套接字在网络中传送数据。如果对象部署在受防火墙保护的封闭环境中,则此方法是理想的选择。该方法使用套接字在对象之间传递二进制数据,因此性能更好。由于它使用 TCP 通道来提供对象,因此具有在封闭环境中开销较小的优点。由于防火墙和配置问题,此方法不能在 Internet 上使用。

因此我们也需要更根据自己的需求来选择通道!看看remoting有这么多可以选择的方式:选择激活模式,选择通道,选择承载方式,如此多的选择给了我们灵活的同时也增加了理解remoting的难度。

msdn相关章节:http://msdn.microsoft.com/library/CHS/cpguide/html/cpconChannels.asp

最后说一下前面的遗留问题,为什么会发生这个安全异常?

http://www.cnblogs.com/lovecherry/archive/2005/05/20/159335.html

msdn说:

依赖于运行时类型验证的远程处理系统必须反序列化一个远程流,然后才能开始使用它,未经授权的客户端可能会试图利用反序列化这一时机。为了免受这种攻击,.NET 远程处理提供了两个自动反序列化级别:Low 和 Full。Low(默认值)防止反序列化攻击的方式是,在反序列化时,只处理与最基本的远程处理功能关联的类型,如自动反序列化远程处理基础结构类型、有限的系统实现类型集和基本的自定义类型集。Full 反序列化级别支持远程处理在所有情况下支持的所有自动反序列化类型。

舒筋活络正骨水
小孩脸黄怎么办
止咳药不含防腐剂效果好吗
防动脉硬化症状能吃通心络吗
猜你会喜欢的
猜你会喜欢的