注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 2003 resource kit之Roboc..
 帮助

.net面试题目汇总(四)


2008-03-04 10:20:48
 标签:.net 题目 面试   [推送到博客圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ddkangfu.blog.51cto.com/311989/64047
一、Remoting和WebService
面试的时候有时候会被问到Remoting和Webservice技术的区别:
 
1. Remoting MarshByReference的,可以传变量的引用,直接对服务器对象操作。速度快,适合intranet(企业内部互联网)。
Webservice MarshByValue的,必须传对象的值。速度慢,可以过FIREWALL,配置比较简单,适合internet(因特网)。
 
2. 一般来说,Remoting是和平台相关的,需要客户和服务器都是.NET,但可配置特性比较好,可以自定义协议,可以使用Http或Tcp协议。
Webservice可以做到跨平台通信,但必须采用SOAP协议。
 
3. soap消息有rpc和文档两种样式。
文档样式的body元素中包含一个或多个元素,可以是任何内容,只要接受者理解就行了。rpc样式的的body元素中包含调用的方法或远程过程的名称,以及代表方法参数的元素。
.net对这两种样式的实现就是Webservice 和Remoting
 
4.Remoting不仅能传输XML格式的SOAP包(HTTP),还能传输二进制的数据流(TCP)。
Webservice只能传输SOAP包。
 
5.Remoting可以用于有状态的情况,Webservice是基于Http无状态的。
 
6.在Windows操作系统中,Webservice是基于.net framework和IIS框架之上的,而Remoting则是不依赖于IIS的,使用者可以开发和部署自己的宿主服务器。
 
这里还有两个重点:
1.Remoting的SingleTon和SingleCall模式
SingleTon模式:此为有状态模式。如果设置为SingleTon激活方式,则Remoting将为所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon实例将在方法调用中一直维持其状态。举例来说,如果一个远程对象有一个累加方法(i=0;++i),被多个客户端(例如两个)调用。如果设置为SingleTon方式,则第一个客户获得值为1,第二个客户获得值为2,因为他们获得的对象实例是相同的。如果熟悉Asp.Net的状态管理,我们可以认为它是一种Application状态。
SingleCall模式:SingleCall是一种无状态模式。一旦设置为SingleCall模式,则当客户端调用远程对象的方法时,Remoting会为每一个客户端建立一个远程对象实例,至于对象实例的销毁则是由GC自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的都是1。我们仍然可以借鉴Asp.Net的状态管理,认为它是一种Session状态。
 
2.WebService和SOAP支持处理的数据类型
不知道大家有没有遇到这种情况:在调用WebService并给一个方法传递了一个DataRow参数时,运行时会抛出异常: "没法将参数序列化!",如果把DataRow加入到DataSet中,并将DataSet作为参数传递再运行就OK了。 这是因为:XML WebService只能对数据集DataSet对象类型进行XML序列化,不能对DataRow对象类型进行XML序列化造成的错误.  所以了解一下XML WebService支持序列化的基  本数据类型是比较重要的.它支持的数据类型如下:
  1).基本数据类型. 
      标准类型,如:int float bool DateTime string等基本数据类型
  2).枚举.
      支持枚举Enum定义的类型
  3).自定义对象.
      可以传递任意基于自定义类或结构创建的对象。 但要注意一点: 它只能传输数据成员(变量和属性). 如果定义了方法,则方法不能进行序列化传输,序列化后只剩下数据成员.
  4).DataSet对象
      支持DataSet,切记:不支持DataTable和DataRow,DataSet已经是Webservice能够支持的最小的可序列化对象.
  5).XmlNode对象
      基于XmlNode的对象可以表示XML文档的一部分.
  6).数组和集合
      可以使用任何被支持的类型的数组和简单集合,包括: DataSet对象/XmlNode对象和自定义对象.
 
顺便说明一下序列化的概念:
序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。要使一个类可序列化,最简单的方法是使用 Serializable 属性对它进行标记。给个例子:
[Serializable]
class MyUser
{
    public string sUserName;
    public int iAage;
    public override string ToString()
    {
        return string.Format("姓名:{0},年龄:{1}", sUserName, iAage);
    }
}
 
二、XML相关知识
 
[持续更新中,敬请关注.....]

本文出自 “一叶障目” 博客,请务必保留此出处http://ddkangfu.blog.51cto.com/311989/64047





    文章评论
 
2008-03-04 10:39:34
整理的挺好的

2008-03-09 08:48:50
推荐基本.net方面的好吗 Asp.net和Ajax如何更好的结合?

2008-03-11 00:57:55
.Net基础的可以去看一下《C#高级编程》,至于Asp.net和Ajax的结合,我现在正在看《征服Asp.net 2.0 Ajax --Web开发技术详解》。这本书很不错,写得很详细。

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: