摘要: 主要是思维方式的不同:显然,RPC是以方法调用的方式描述WebSerivce的,也就是说,你要说清楚调用的那个方法,以及各个参数的名称和值。要描述这些东东,SOAP消息就要有一个统一的规范,指出那一部分是方法名,哪个部分是参数,哪个部分是返回值。换句话说,RPC方式调用的SOAP消息格式是有章可循的,固定的。(比如说,每个Parameter必须对应一个Part,Part的name必须和参数名一致)。而Document则是以文档传输的方式描述WebService,只要你的SoapBody里面是一个可以用Schema描述的合法的Xml文档就行了,对具体的格式没有什么要求(Schema要在WSDL里 阅读全文
posted @ 2012-02-06 16:25 ^_^肥仔John 阅读(7727) 评论(0) 推荐(2) 编辑
摘要: 7.10 Web Service开发中需要注意的问题(2)10.用TcpTrace查看SOAP请求/应答消息对于开发Web服务应用的人来说,调试可能是件异乎寻常的难事,因为无论是.NET SDK还是VS.NET,都没有提供工具来查看客户端和服务器之间的SOAP消息。如果.NET和非.NET的客户端、服务器端的交互过程出现了问题,要想找出问题的根源,拥有查看SOAP消息的能力就尤为重要,因为这类问题往往与SOAP消息的格式有关(例如"消息中包含了SOAPAction吗?")。tcpTrace(www.pocketsoap.com/tcptrace)是一个查看这类消息交换过程的 阅读全文
posted @ 2012-02-06 15:06 ^_^肥仔John 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 7.10 Web Service开发中需要注意的问题(1)1.接口是自说明的接口的名字、参数和返回值应该一看就知道这接口大概是干什么用的。当然接口描述文档肯定是必需的,但这些描述文档的质量谁知道怎么样呢,谁有空天天翻着文档写东西呢,又有谁会背下来呢?所以让人眼前一亮的接口命名绝对值得,这也是所有代码书会告诉你应该遵守的一条规则。2.服务接口粒度要合适Web Service服务接口粒度太小了,那纯粹是不考虑XML解析性能了。一般新手容易犯这毛病,简单地把类的方法暴露出来做服务接口,这样其实是把原来在 local的调用放到了remote,除此之外几乎没有任何好处。粒度太大,会给使用者带来很多麻烦, 阅读全文
posted @ 2012-02-06 15:03 ^_^肥仔John 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 7.9.3 访问IP限制除了以上两种方式以外,还有一种比较简单的验证方式,就是通过对来源IP的检查来进行验证,我们只允许指定IP的服务器来访问,保证点对点的安全,我们可以在Web Service的方法中加入对IP的检查。(示例位置:光盘\code\ch07\WebService1)boolValidateIP(intUserID,outstringexceptionInfo) { exceptionInfo=""; stringuip=HttpContext.Current.Request.UserHostAddress; Commondal=newCommon(); Li 阅读全文
posted @ 2012-02-06 14:50 ^_^肥仔John 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 7.9.2 采用SSL实现加密传输(5)5)配置网站启用SSL通道在网站属性"目录安全性"标签页中单击安全通信栏的"编辑"按钮,然后,勾选"要求安全通道(SSL)"选项,如图7-37所示。(点击查看大图)图7-37 启用网站SSL通道忽略客户端证书:选择该选项可以允许用户不必提供客户端证书就可访问该站点。接受客户端证书:选择该选项可以允许具有客户端证书的用户进行访问,证书不是必需的。具有客户端证书的用户可以被映射;没有客户端证书的用户可以使用其他身份验证方法。要求客户端证书:选择该选项则仅允许具有有效客户端证书的用户进行连接。没有有效 阅读全文
posted @ 2012-02-06 14:43 ^_^肥仔John 阅读(681) 评论(0) 推荐(0) 编辑
摘要: 7.9.2 采用SSL实现加密传输(4)3)颁发服务器证书提交证书申请以后,还需要颁发服务器证书。依次选择"开始"→"设置"→"控制面板",双击"管理工具",再双击"证书颁发机构",在打开的对话框中选择"挂起的申请"选项,如图7-31所示。(点击查看大图)图7-31 挂起的申请找到刚才申请的证书,然后用鼠标右键单击该项,在弹出的快捷菜单中选择"所有任务"→"颁发"命令,如图7-32所示。颁发成功后,选择"颁发的证书" 阅读全文
posted @ 2012-02-06 14:42 ^_^肥仔John 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 7.9.2 采用SSL实现加密传输(3)2)申请服务器证书完成上述设置后,还要把创建的请求证书文件提交给证书服务器。在服务器端的IE浏览器地址栏中输入"http://localhost/CertSrv/default.asp"。在"Microsoft 证书服务"欢迎窗口中单击"申请一个证书"链接,如图7-26所示。接下来在证书申请类型中单击"高级证书申请"链接,如图7-27所示。图7-26 申请证书图7-27 选择证书类型然后在高级证书申请窗口中单击"使用base64编码的CMC或PKCS#10……&qu 阅读全文
posted @ 2012-02-06 14:40 ^_^肥仔John 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 7.9.2 采用SSL实现加密传输(2)2.配置SSL网站1)创建请求证书文件要想让Web Service使用SSL安全机制,首先需将Web Service配置为网站。然后为该网站创建请求证书文件。依次单击"控制面板"→"管理工具"按钮,运行"Internet 信息服务(IIS)管理器",在管理器窗口中展开"网站"目录,用鼠标右键单击要使用SSL的Web Service网站,在弹出的快捷菜单中选择"属性"命令,在网站属性对话框中切换到"目录安全性"选项卡,如图7-19所示,图 阅读全文
posted @ 2012-02-06 14:38 ^_^肥仔John 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 7.9.2 采用SSL实现加密传输(1)在默认情况下,IIS使用HTTP协议以明文形式传输数据,Web Service就是使用HTTP协议进行数据传输的。Web Service传输的数据是XML格式的明文。没有采取任何加密措施,用户的重要数据很容易被窃取,如何才能保护网络中传递的这些重要数据呢?SSL(Security Socket Layer)的中文全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安全性,同时SSL安全机制是依靠数字证书来实现的。SSL基于公用密钥和私人密钥,用户使用公用密钥来加密数据,但解密数据必须使用相应 阅读全文
posted @ 2012-02-06 14:31 ^_^肥仔John 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 7.9 如何保证Web Service的安全要以安全的方式访问Web服务方法,可以考虑以下安全措施:是谁调用?--SoapHeader身份认证。来自哪里?--访问IP认证。加密传输 --SSL安全访问。这些安全保护措施常常是配合使用的。7.9.1 通过SoapHeader来增强Web Service的安全性通过SoapHeader我们可以让具有指定用户口令的用户来访问我们的Web服务接口。(完整代码示例位置:光盘\code\ch07\WebAppClient\WebForm-SoapHeader.aspx)1.Web Service实现步骤(1)定义自己的SoapHeader派生类。//< 阅读全文
posted @ 2012-02-06 14:28 ^_^肥仔John 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 7.8 实现异步调用Web Service普通调用Web Service的方法,在Web Service执行期间客户端会一直等待服务执行完毕才能响应。从而造成客户端UI线程的阻塞假死现象。这时候,异步调用就显得很有用,它可以让客户端在调用Web Service时,不至于阻塞客户端的UI线程导致假死,还可以在调用Web Service的同时做些其他的处理。异步调用Web Service也有几种不同的方法,这里介绍常用的两种。第一种方法,是通过利用Backgroundworker对象实现。BackgroundWorker 类允许你在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间 阅读全文
posted @ 2012-02-06 14:20 ^_^肥仔John 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 7.7.2 手动发送HTTP请求调用Web Service但如果调用Web Service的不是在.NET中,无法直接添加引用怎么办呢?下面就看两个不是直接通过代理类实现对Web Service的调用。(完整代码示例位置:光盘\code\ch07\WinFormsAppClient)方式一:Get方式的调用privatevoidbutton1_Click(objectsender,EventArgse) { stringstrURL="http://localhost:12074/Service1.asmx/ GetProductPrice?ProductId="; str 阅读全文
posted @ 2012-02-06 14:19 ^_^肥仔John 阅读(792) 评论(0) 推荐(0) 编辑
摘要: 7.7 WinForm如何调用Web Service本节介绍WinForm如何调用Web Service。7.7.1 .NET的WinForm调用Web Service在.NET的WinForm中调用Web Service的操作基本上和在ASP.NET中调用Web Service是一样。(完整代码示例位置:光盘\code\ch07\WinFormsAppClient)首先在项目上单击鼠标右键,在弹出的快捷菜单中选择"添加Web引用"命令,如图7-11所示。添加完引用后,项目中也会创建一个名叫Web References的目录,即引用代理类,如图7-12所示。图7-11 添加 阅读全文
posted @ 2012-02-06 14:14 ^_^肥仔John 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 7.6.4 SOAP调用Web Service(示例位置:光盘\code\ch07\ WebAppClient\ JsService4.htm)<htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <title>SOAP对调用WebService</title> <SCRIPTlanguage="JavaScript"> functionGetHelloWorld_SOAP(i) { varxmlhttp=newActiveXObject(" 阅读全文
posted @ 2012-02-06 14:13 ^_^肥仔John 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 基本上和第6.6节的RSS阅读器原理相同,通过XML HTTP实现客户端方式的静态读取。(示例位置:光盘\code\ch07\ WebAppClient\ JsService3.htm)<htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <title>XMLHTTP-POST</title> <scriptlanguage="JavaScript"> functionGetHelloWorld_HTTPPOST(i) { varURL=" 阅读全文
posted @ 2012-02-06 14:12 ^_^肥仔John 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 7.6.2 通过Microsoft.XMLDOM调用Web Service(1)在页面中添加如下代码:<body> <inputtype="button"value="调用"onclick="getdata()"><br> <spanid="div1"class="list"></span> </body>(2)调用WebService返回字符串:<head> <title>通过Microsoft.X 阅读全文
posted @ 2012-02-06 14:08 ^_^肥仔John 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 7.5 ASP.NET如何调用Web Service在.NET中调用Web Service其实和创建Web Service一样简单。(完整代码示例位置:光盘\code\ch07\ WebAppClient)实现步骤如下。(1)首先我们创建一个ASP.NET Web 应用程序。(2)添加Web Service引用。在项目上单击鼠标右键,在弹出的快捷菜单中选择"添加Web 引用"命令,如图7-6所示,弹出"添加Web引用"对话框,如图7-7所示的窗口。图7-6 选择"添加Web引用"命令(点击查看大图)图7-7 "添加Web引用 阅读全文
posted @ 2012-02-06 13:55 ^_^肥仔John 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 7.6 JavaScript如何调用Web Service本节将为你介绍JavaScript如何调用Web Service。7.6.1 通过webbehavior.htc调用Web Servicewebservice.htc是微软提供的一个对Web Servie常用方法的封装,可以从微软官方网站下载,安装IE webcontrols时也会安装到你的网站根目录下,使用时需要注意路径。请注意代码中body的属性设置。实现步骤如下。(1)首先,我们先创建一个加法运算的Web Service,例如:usingSystem.Web; usingSystem.Web.Services; namespace 阅读全文
posted @ 2012-02-06 13:55 ^_^肥仔John 阅读(530) 评论(0) 推荐(0) 编辑
摘要: 1.引言了解.NET的内存管理机制,首先应该从内存分配开始,也就是对象的创建环节。对象的创建,是个复杂的过程,主要包括内存分配和初始化两个环节。例如,对象的创建过程可以表示为:FileStreamfs =newFileStream(@"C:"temp.txt",FileMode.Create);通过new关键字操作,即完成了对FileStream类型对象的创建过程,这一看似简单的操作背后,却经历着相当复杂的过程和周折。本篇全文,正是对这一操作背后过程的详细讨论,从中了解.NET的内存分配是如何实现的?2.内存分配关于内存的分配,首先应该了解分配在哪里的问题。CLR 阅读全文
posted @ 2012-02-06 13:00 ^_^肥仔John 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 2.2托管堆的内存分配机制引用类型的实例分配于托管堆上,而线程栈却是对象生命周期开始的地方。对32位处理器来说,应用程序完成进程初始化后,CLR将在进程的可用地址空间上分配一块保留的地址空间,它是进程(每个进程可使用4GB)中可用地址空间上的一块内存区域,但并不对应于任何物理内存,这块地址空间即是托管堆。托管堆又根据存储信息的不同划分为多个区域,其中最重要的是垃圾回收堆(GC Heap)和加载堆(Loader Heap),GC Heap用于存储对象实例,受GC管理;Loader Heap又分为High-Frequency Heap、Low-Frequency Heap和Stub Heap,不同 阅读全文
posted @ 2012-02-06 13:00 ^_^肥仔John 阅读(171) 评论(0) 推荐(0) 编辑