技术开发 频道

Remoting IIS的承载方式

【IT168技术文档】

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

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

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

<configuration> <appSettings> <add key="strconn" value="server=(local);uid=sa;pwd=;database=UBISOFT" /> </appSettings> <system.runtime.remoting> <application> <service> <wellknown type="RemoteObject.MyObject,RemoteObject" objectUri="MyObject.soap" mode="SingleCall" /> </service> <channels> <channel ref="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> <add key="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的难度。

0
相关文章