首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 软件教学
RemotingIIS承载方式-.NET教程,评论及其它
作者:网友供稿 点击:53
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
这里来说一下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的难度。

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 反序列化级别支持远程处理在所有情况下支持的所有自动反序列化类型。

我们首先来修改服务端的配置文件:

<configuration>
    
<system.runtime.remoting>
        
<application name="remoteserver">
            
<service>
                
<wellknown type="remoteobject.myobject,remoteobject" objecturi="remoteobject.myobject"
                    mode
="singleton" />
            
</service>
            
<channels>
                
<channel ref="tcp" port="9999"/>
                
<serverproviders> 
                    
<provider ref="wsdl" />
                    
<formatter ref="soap" typefilterlevel="full" />
                    
<formatter ref="binary" typefilterlevel="full" />
                    
</serverproviders>
            
</channels>
        
</application>
    
</system.runtime.remoting>
</configuration>

当然也可以用程序进行设置:
using system;
using system.collections;
using system.runtime.remoting;
using system.runtime.remoting.channels;
using system.runtime.remoting.channels.tcp;
using system.runtime.serialization.formatters;

remotingconfiguration.registerwellknownservicetype(typeof(remoteobject.myobject), "remoteobject.myobject", wellknownobjectmode.singleton);
            binaryserverformattersinkprovider serverprovider 
= new binaryserverformattersinkprovider(); 
            binaryclientformattersinkprovider clientprovider 
= new binaryclientformattersinkprovider(); 
            serverprovider.typefilterlevel 
= typefilterlevel.full; 
            idictionary props 
= new hashtable(); 
            props[
"port"= 9999
            tcpchannel channel 
= new tcpchannel(props,clientprovider,serverprovider); 
            channelservices.registerchannel(channel); 
            console.readline();

客户端还要用程序进行调整:
若要使用配置文件设置反序列化级别,必须显式指定 <formatter> 元素的 typefilterlevel 属性。虽然这通常是在服务器端指定的,但您还必须为注册来侦听回调的客户端上的任何信道指定这一属性,以控制其反序列化级别

在程序前面加上和服务端基本相同的代码:
binaryserverformattersinkprovider serverprovider = new binaryserverformattersinkprovider(); 
            binaryclientformattersinkprovider clientprovider 
= new binaryclientformattersinkprovider(); 
            serverprovider.typefilterlevel 
= typefilterlevel.full; 
            idictionary props 
= new hashtable(); 
            props[
"port"= 0
            tcpchannel channel 
= new tcpchannel(props,clientprovider,serverprovider); 
            channelservices.registerchannel(channel); 

这样就可以了,注意:如果在同一个机器上面测试端口号应设为不同于服务器端设置的端口号,推荐设置为0(远程处理系统自动选择可用端口)

.net remoting 自身不提供安全模型。然而,通过将远程对象驻留在 asp.net 中并使用 http 通道进行通信,远程对象可以使用 iis 和 asp.net 提供的基本安全服务。比较而言,tcp 通道和自定义的主机可执行文件能够提供更高的性能,但这种组合不提供内置的安全功能。

• 若要对客户端进行身份验证,请使用 http 通道,在 asp.net 中驻留对象,以及在 iis 中禁用匿名访问。
 
• 如果您不担心客户端身份验证问题,请使用 tcp 通道,它可以提供更高的性能。
 
• 如果您使用 tcp 通道,请使用 ipsec 保护客户端和服务器之间的通信通道。使用 ssl 来保护 http 通道。
 
• 如果您需要对远程资源进行受信任的调用,请将组件驻留在 windows 服务中,而不是驻留在控制台应用程序中。
 
• 始终不要向 internet 公开远程对象。在这种情况下,请使用 web 服务。
应该仅在 intranet 中使用 .net remoting。应该使用内部方式从 web 应用程序访问对象。即使对象驻留在 asp.net 中,也不要向 internet 客户端公开它们,因为客户端必须是 .net 客户端。


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·C#数据库连接字符大全-.NET教程,C#语言
·Ftp客户端编程-.NET教程,面向对象编程
·ASP.NET POST方式提交数据-.NET教程,Asp.Net开发
·单独控制IE WebControl里面的Treeview的几个动作的Postback-.NET教程,数据库应用
·根据IP找地址的java实现-JSP教程,Java技巧及代码
·ASP.NET 2.0 多文件上传小经验-.NET教程,Asp.Net开发
·ASP.NET 2.0中隐藏listbox的某一项-.NET教程,Asp.Net开发
·使用Windows Script 关闭和打开指定程序-.NET教程,数据库应用
·asp.net 2.0下嵌套masterpage页的可视化编辑-.NET教程,Asp.Net开发
·Jsp学习笔记(三)-----Jsp语法!-JSP教程,Jsp/Servlet
最新文章
·让windows vista系统只能识别自己指定的u盘_windows vista
·优化建议与技巧(来自adsense优化团队)_网赚技巧
·艾瑞曹军波:广告联盟发展的下一个突破点_网赚技巧
·狗狗网ceo李晶:80后创业 心态最重要_站长访谈
·从九句话看网站的综合发展_站长心得
·改进网页可读性的7个方法_站长心得
·常见问题_google adsense 广告点击统计_google推广
·10条优秀的网站设计经验1_站长心得
·怎样做个小网站_站长心得
·实施会员制计划中7项致命的失误_网站推广
相关主题
  • Remoting和Web服务的区别-.NET教程,Web Service开发
  • Remoting的承载方式是这样的-.NET教程,评论及其它
  • Remoting的事件机制(带具体例子)-.NET教程,评论及其它
  • Remoting服务端和客户端程序该这样模式来写-.NET教程,评论及其它
  • Remoting事件机制续-.NET教程,评论及其它
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭