`
yizhyi
  • 浏览: 59444 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

.NET框架和VS.NET中的SOAP

    博客分类:
  • .net
阅读更多

简介<o:p></o:p>

<o:p> </o:p>

Microsoft? .NET 框架和 Microsoft? Visual Studio.NET 利用 XML SOAP 技术,使开发人员能够创建广泛的解决方案。SOAP 是一个简单、轻便、并在业界获得广泛支持的协议,适用于各种各样的应用,它与 .NET 框架的结合简单而合乎自然。<o:p></o:p>

<o:p> </o:p>

从底层开始,SOAP 的设计目标就是使之成为一种非常简单的协议,能够以各种不同的方式满足各种不同的需求。除了 Microsoft,已有许多公司实际应用 SOAP,例如 IBMDevelop Mentor Userland<o:p></o:p>

<o:p> </o:p>

在使用 SOAP 的体系中,有若干种关键技术。在创建基于 SOAP 的解决方案时,每种技术都会解决开发人员的一些共同问题。这些技术分别属于 .NET RemotingASP.NET Web Services ATL Web Services,它们具有许多共同的技术特点:<o:p></o:p>

<o:p> </o:p>

用于消息生成和使用的 XML<o:p></o:p>

<o:p> </o:p>

符合 SOAP 1.1 规范,包括第 5 SOAP 编码,这使 SOAP 应用之间具有很好的互操作性。<o:p></o:p>

<o:p> </o:p>

XML 保真性(非第 5 SOAP 编码),用于完全断开的模型。<o:p></o:p>

<o:p> </o:p>

WSDLXML 方案的一种形式),用于提供说明。<o:p></o:p>

<o:p> </o:p>

可用无状态编程模型扩展系统。<o:p></o:p>

<o:p> </o:p>

使用 Visual Studio.NET 的良好开发环境。<o:p></o:p>

<o:p> </o:p>

ASP.NET Web Services .NET Remoting 还共享下列技术:<o:p></o:p>

<o:p> </o:p>

XCOPY 系统部署。<o:p></o:p>

<o:p> </o:p>

System.Net,进行网络通讯时,无论在服务器还是客户端它都运行良好。<o:p></o:p>

<o:p> </o:p>

公共语言运行时可在受控代码和线程缓冲池中重用。<o:p></o:p>

<o:p> </o:p>

提供强大的 SOAP 支持,例如 SOAP 头和单向消息等特性。<o:p></o:p>

<o:p> </o:p>

能够与 C#Visual Basic.NET 或任何符合 CLS 规范的语言(如 CobolPython ComponentPascal 等等)配合使用来编写应用程序。<o:p></o:p>

<o:p> </o:p>

除了以上列出的共同特点和技术以外,ASP.NET Web Services.NET Remoting ATL Web Services 还分别为开发人员提供了许多特有的功能,下面这些内容有助于开发人员在生成应用程序时把握正确的方向。<o:p></o:p>

<o:p> </o:p>

如果您要生成 .ASP 应用程序,ASP.NET Web Services<o:p></o:p>

<o:p> </o:p>

允许与 ASP.NET HTTP 运行时紧密集成。<o:p></o:p>

<o:p> </o:p>

鼓励开发人员着重于运用 XSD 数据类型来提供应用程序。<o:p></o:p>

<o:p> </o:p>

Visual Studio.NET 中提供强大的设计支持。<o:p></o:p>

<o:p> </o:p>

如果您要生成 MTS/COM+ 应用程序,.NET Remoting<o:p></o:p>

<o:p> </o:p>

提供全面的受控代码类型系统的网络保真性。<o:p></o:p>

<o:p> </o:p>

提供在网络上通过引用来传递对象的功能,并且可返回到特定进程中的特定对象。<o:p></o:p>

<o:p> </o:p>

提供二进制通讯能力。<o:p></o:p>

<o:p> </o:p>

如果您要生成 ATL/C++ 应用程序,ATL Server<o:p></o:p>

<o:p> </o:p>

提供灵活并且可控的本机 (C++) 解决方案。<o:p></o:p>

<o:p> </o:p>

建立于 ATL Server ISAPI Web 应用体系机构之上(利用线程缓冲池、缓存,等等)。<o:p></o:p>

<o:p> </o:p>

SOAP 用作 Web 开发工具<o:p></o:p>

<o:p> </o:p>

ASP.NET Web Services 提供了 RAD 方式,以供快速创建和使用 Web 服务。这些服务宽松地组合在一起,并可与 ASP.NET 高度集成。ASP.NET Web Services Web 开发人员在 Internet 上提供 Web 服务的首选方法,它的目标是提供快速、简便、性能优越的 SOAP 服务。<o:p></o:p>

<o:p> </o:p>

ASP.NET Web Services 可以和 ASP.NET HTTP 引擎深入集成,这使得熟悉 Microsoft Web 开发技术的开发人员能够方便地生成和使用基于 SOAP Web 服务。<o:p></o:p>

<o:p> </o:p>

ASP.NET .asmx 文件提供对 Web Services 的支持。.asmx 文件是与 .aspx 文件相似的文本文件。这些文件可以是包含 .aspx 文件的 ASP.NET 应用程序的一部分。它们可以使用 URI 寻址方式,这和 .aspx 文件相同。<o:p></o:p>

<o:p> </o:p>

以下是一个非常简单的 .asmx 文件示例:<o:p></o:p>

<o:p> </o:p>

%@ WebService Language="C#" Class="HelloWorld" %<o:p></o:p>

<o:p> </o:p>

using System;<o:p></o:p>

using System.Web.Services;<o:p></o:p>

<o:p> </o:p>

public class HelloWorld : WebService {<o:p></o:p>

<o:p> </o:p>

[WebMethod] public String SayHelloWorld() {<o:p></o:p>

return "Hello World";<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

}<o:p></o:p>

<o:p> </o:p>

这个文件以 ASP.NET 指示的 Web Service 开始,并将语言设置为 C#(也可以将语言设置为 Microsoft Visual Basic?C 或大约 30 种第三方语言中的任何一种)。然后,它将导入名称空间 System.Web.Services。这个名称空间是必要的,您必须在文件中包括它。下一步,声明 HelloWorld 类。这个类从基类 WebService 导出。最后,任何要作为服务的一部分来访问的方法在它们的签名之前将具有自定义属性 [WebMethod],在 Visual Basic 中则为“<WEBMETHOD()>”。<o:p></o:p>

<o:p> </o:p>

要使这个服务生效,可以将文件命名为 HelloWorld.asmx,然后将它放在虚拟目录 Bar 中的服务器 Foo 上。使用几乎任何兼容 HTML 3.2 或更高版本的浏览器,都可以输入 URL http://Foo/Bar/HelloWorld.asmx 来显示这个 Web Service 的公用方法(标有 WebMethod 属性),以及那些可用来调用这些方法的协议,例如 SOAP HTTP GET。如果在 Internet Explorer 地址栏中输入 http://Foo/Bar/HelloWorld.asmx?SDL,基于服务说明语言 (WSDL) 语法,将产生与 XML 文件相同的信息。这个 WSDL 文件由访问服务的客户使用,并且非常重要。<o:p></o:p>

<o:p> </o:p>

访问 Web Serivces<o:p></o:p>

<o:p> </o:p>

除了使开发人员能够创建 Web Services 的技术之外,Microsoft .NET 框架还提供了一套用来“使用”(即以客户端身份访问)Web Services 的成熟工具与代码。因为 Web Services 基于简单对象访问协议 (SOAP) HTTP 等开放协议,所以这种客户端技术也可以用于使用非 ASP.NET Web Services<o:p></o:p>

<o:p> </o:p>

SDK 中有一种称为 WebServiceUtil.exe 的工具(在 VS IDE 中使用“Add Web Reference...”选项时自动生效)。这个程序可用于下载 Web Service WSDL 说明,然后创建表示这个服务的地址的代理类。例如,您可以输入:<o:p></o:p>

<o:p> </o:p>

WebServiceUtil /c:proxy /pa:http://someDomain.com/someFolder/HelloWorld.asmx?SDL<o:p></o:p>

<o:p> </o:p>

然后,系统将创建称为 HelloWorld.cs 的代理类。<o:p></o:p>

<o:p> </o:p>

这个类与前面创建的类看起来非常相似。它包括称为 SayHelloWorld 的方法,该方法返回字符串。将这个代理类编译到应用程序中,然后调用其方法,结果是代理类在 HTTP 上打包 SOAP 请求,并接收 SOAP 编码的回应,然后封送为一个字符串。<o:p></o:p>

<o:p> </o:p>

从客户端来看,代码非常简单:<o:p></o:p>

<o:p> </o:p>

Dim myHelloWorld As New HelloWorld()<o:p></o:p>

Dim sReturn As String = myHelloWorld.SayHelloWorld()<o:p></o:p>

<o:p> </o:p>

返回值将是“Hello World”。<o:p></o:p>

<o:p> </o:p>

SOAP 用作组件开发工具<o:p></o:p>

<o:p> </o:p>

创建分布式应用程序时,如果需要高度控制性并要求能够选择系统耦合程度,那么可以使用 Microsoft .NET Remoting<o:p></o:p>

<o:p> </o:p>

Microsoft .NET Remoting 还提供了与公共语言运行时的深入集成,并且为开发人员提供了全面的跨连接类型系统保真性。这包括构造函数、委托、重载方法、通过值和引用传递对象、类的层次结构、接口、方法、属性、字段,以及通过可插入通道、分布式标识、激活、租用生存期和 CallContext(独立于参数的 SOAP 头中的流对象)在连接上的应用程序 (Web Services) 之间进行 Marshal by Value(制作副本)以及 Marshal by Ref(传递 ObjRef)。<o:p></o:p>

<o:p> </o:p>

使用 .NET Remoting,开发人员可以从任何进程提供 Remoting 终结点,包括控制台应用、GUI 应用、NT Service IIS。在任何使用有效加载编码(在产品中提供了可插入序列化格式化程序以及 SOAP 和二进制格式化程序)通过可插入通道进行的任何传输过程中都会出现这种情况。SOAP=HTTP+XML,同时完全支持 HTTP SMTP 上的 SOAP 1.1,这十分令人满意。<o:p></o:p>

<o:p> </o:p>

我们可以获得 WSDL 支持来说明 Web Service 并保证运行时类型系统的完全保真性。.NET Remoting 提供了 .NET SDK Soapsuds 工具,可以从元数据生成受控类和 COM 对象的服务说明。Soapsuds 工具也使用服务说明并生成元数据和代理。开发人员可以使用密集侦听模型,将自己的操作作为应用程序入站和出站消息流插入。想更为深入的开发人员则可以采用使用套接字的二进制编码 TCP 通道。<o:p></o:p>

<o:p> </o:p>

.NET Remoting 使受控组件、本机 COM/COM+ 组件以及接受服务的组件(使用 COM+ 服务的受控组件)远程化。SOAP、二进制以及任何一种可插入通道和格式上都可能出现这些情况。<o:p></o:p>

<o:p> </o:p>

样例:SOAP 受控代码事件<o:p></o:p>

<o:p> </o:p>

下列代码演示如何在两个应用程序之间引发受控代码事件。客户端有一个本地对象,注册为接收远程对象的事件通知。客户端呼叫服务器对象时,就引发事件,产生对客户端本地对象的回叫。<o:p></o:p>

<o:p> </o:p>

服务器端<o:p></o:p>

<o:p> </o:p>

zap.cs<o:p></o:p>

using System;<o:p></o:p>

<o:p> </o:p>

namespace Zap<o:p></o:p>

{<o:p></o:p>

// 定义事件参数<o:p></o:p>

public class GreetingEventArgs : EventArgs<o:p></o:p>

{<o:p></o:p>

public GreetingEventArgs(string greeting)<o:p></o:p>

{<o:p></o:p>

this.greeting = greeting;<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

public string greeting;<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

// 定义事件<o:p></o:p>

public delegate void GreetingEvent(object sender,<o:p></o:p>

GreetingEventArgs e);<o:p></o:p>

<o:p> </o:p>

// 定义服务<o:p></o:p>

public class Waz : MarshalByRefObject<o:p></o:p>

{<o:p></o:p>

// 客户端将预定和取消预定此事件<o:p></o:p>

public event GreetingEvent Greeting;<o:p></o:p>

<o:p> </o:p>

// 由客户端远程调用的方法<o:p></o:p>

public void HelloMethod(string greeting)<o:p></o:p>

{<o:p></o:p>

Console.WriteLine("Received String {0}", greeting);<o:p></o:p>

<o:p> </o:p>

// 将字符串打包到 GreetingEventArgs <o:p></o:p>

GreetingEventArgs e = new GreetingEventArgs(greeting);<o:p></o:p>

<o:p> </o:p>

// 引发事件<o:p></o:p>

if (Greeting != null)<o:p></o:p>

{<o:p></o:p>

Greeting(this, e);<o:p></o:p>

}<o:p></o:p>

}<o:p></o:p>

}<o:p></o:p>

分享到:
评论

相关推荐

    Spring.net框架

    在这个系列 中,我仅仅利用Sping.net这个框架向大家展示一下Ioc与AOP的强大功能(呵呵,其实写这段话的目的是因为“文章题目”牛皮吹得有点大了,给自 己个台阶下罢了)。 在这个系列中一共包含6个案例,从简单到...

    Visual Studio.NET Framework技术内幕(第二部分/共二个部分)

    《Visual Studio.NET Framework技术内幕》全面覆盖了.NET框架的体系结构、库和服务,以及如何在Visual Studio.NET支持的编程语言中使用它们。《Visual Studio.NET Framework技术内幕》独一无二地使用非语言规范的...

    asp.net知识库

    .Net框架下的XSLT转换技术简介 一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0...

    ASP.NET Web API 2框架揭秘

    我觉得大部分人都是“眼球动物“,他们关注的往往都是目光所及的东西。...微软意识到在一个“重量级”通信框架上通过扩展实现“轻量级”的通信,还不如重新构建一个通信平台,于是ASP.NET Web API应运而生。

    Visual C#.NET技术内幕(修订版)源码

    部分着重 介绍.net框架所使用的数据访问、存储技术ado.net以及xml的有关内容; 第?部分则着重介绍了使用visual c# .net创建可用于web的应用程序的方 法和相关技术,介绍了soap和web服务。 本书适合...

    Visual Studio.NET Framework技术内幕(第一部分/共二个部分)

    《Visual Studio.NET Framework技术内幕》全面覆盖了.NET框架的体系结构、库和服务,以及如何在Visual Studio.NET支持的编程语言中使用它们。《Visual Studio.NET Framework技术内幕》独一无二地使用非语言规范的...

    C#.NET开发者指南计算机专业毕业设计外文翻译-中英文对照.docx

    尽管不可能在一本书中包含所有的特征,但是本书中包含了其中的关键思想、类库和.NET框架的API,希望本书能够帮助你容易地使用C#创建新的应用程序。 既然有这么多特征要学习和掌握,那就不要再等待了,咱们现在就开始...

    开源贡献者最多的.net开源web框架ServiceStack.zip

    ServiceStack 是 .Net 和 Mono 的开源框架,相对 WCF,MVC 及 Web API 而言它是开发 Web 服务与 Web 应用的有力替代品。该项目近期宣布他们已经达到超过 100 位合作者的里程碑。 ServiceStack 是一系列事物的综合...

    AJAX與調用Webservice博客技術匯整

    JavaScript+XMLHTTP調用Webservice 5 使用WebService行為組件(webservice.htc) 調用WebService 8 AJAX和SOAP ─ 異步數據和XML獲取 ...Microsoft .NET框架和VS.NET中的 SOAP 94 SQL Server XML 和 Web 應用體系架構 105

    《ASP.NET程序设计实用教程》配套资料-cd, ppt

     第5章 .NET框架类,介绍了常用框架类的命名控件System.IO、System.Web、System.Net和System.Drawing等。  第3部分 ASP.NET数据库程序设计  第6章 ADO.NET数据访问接口,介绍了ADO.NET的结构、ADO...

    北京中科信软 Visual Basic.NET培训

    二 .NET框架&C#编程 面向对象的基本知识体系 .NET中的面向对象设计与应用 C#与设计模式 泛型 C#中的新特性 程序集 .NET应用程序部署和版本控制 委托和事件 线程 反射 对象序列化 数据流和文件 Internet...

    [ASP.NET.AJAX编程参考手册(涵盖ASP.NET.3.5及2.0)].(美)霍斯拉维.扫描版.pdf

    ASP.NET AJAX将ASP.NET/.NET Framework中的服务器端编程技术引入到客户端框架,从而带来了客户端编程的丰富特性。本书主要阐述ASP.NET AJAX是如何在客户端模拟这些丰富特性的。 本书通过大量实例、深入的描述以及...

    Web Service编程:用C#_NET开发网络服务

    Web Service编程--用C#.NET开发网络服务(1...Web Service基础 第六章 ASP.NET和ADO.NET 第七章 XML Web Service 第八章 SOAP、WSDL和UDDI 第九章 开发基于.NET平台的Web服务 附录A .NET框架类库 &lt;br&gt;

    ASP.NET的网页代码模型及生命周期

    在服务器中,ASP.NET框架解释信息,并触发事件与之对应的处理程序。该程序可以是.aspx页面中的处理程序,也可以是开发者自定义的类库,或者COM组件等。事件驱动处理如图4-7所示。 图4-7 页面框架的事件驱动处理...

    Asp.Net及相关技术介绍

    此PPT讲述了Asp.Net WebAPI及相关Web服务技术发展历史。 共80多页,Asp.Net WebAPI在讲到第36页的时候才会出现,因为这个技术不是凭空产生的,它有着自己...4. 与WebAPI配合的前端JS开发框架介绍(Knockout与jQuery)。

    asp与asp.net的区别

    ASP(Active Server Pages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、...

    ASP.NET在线测评系统

    主要基于Internet技术同时兼顾Window应用来实现软件的创建、部署、使用的.net框架是微软21世纪主推的开发平台,并且,也是微软下一代操作系统策略的核心。 相比于JAVA是一个标准,.Net是一个架构,它包含了在操作...

    Visual C# .NET技术内幕 源代码 RAR格式

    第11部分讲述了Visual C#.NET的高级应用,介绍与过去的编程语言相比的独到之处:第111部分介绍了Windows窗体设计,详细地讲述了Windows窗体的用法,以及它对应用程序编写过程的简化:第IV部分着重介绍.NET框架所...

    asp.net技术内幕(1)

    第一部分 使用ASP.NET Web表单 &lt;br&gt;第1章 建立ASP.NET页面 &lt;br&gt;1.1 ASP.NET和.NET框架 1.1.1 .NET框架类库 1.1.2 理解名称空间 1.1.3 标准的ASP.NET名称空间 1.1.4 与.NET框架兼容的语言 ...

    中美 IT 培训 C# Asp.net 全套笔记1

    详细地讲授Web Service及其应用和相关的安全性问题、WSE(Web Services Enhancements)、SOAP、WSDL、UDDI、Windows Service、VSS(Visual Source Safe)。讲授用户控件和第三方控件的开发和使用。学习HTML、XML、...

Global site tag (gtag.js) - Google Analytics