大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> Microsoft .NET 框架和 Visual Studio.NET 中的 SOAP

Microsoft .NET 框架和 Visual Studio.NET 中的 SOAP

时间: 2021-07-31 作者:daque

纲要:对于 .net remoting、asp.net web services 和 atl web services 中 soap 功效的计划。目次简介将 soap 用作 web 开拓东西将 soap 用作组件开拓东西将 soap 用作 atl 开拓东西归纳简介microsoft® .net 框架和 microsoft® visual studio.net 运用 xml 和 soap 本领,使开拓职员不妨创造普遍的处置计划。soap 是一个大略、简捷、并在技术界赢得普遍扶助的和议,实用于形形色色的运用,它与 .net 框架的贯串大略而符合天然。从底层发端,soap 的安排目的即是使之变成一种特殊大略的和议,不妨以百般各别的办法满意百般各别的需要。除去 microsoft,已有很多公司本质运用 soap,比方 ibm、develop mentor 和 userland。在运用 soap 的体制中,有几何种要害本领。在创造鉴于 soap 的处置计划时,每种本领城市处置开拓职员的少许共通题目。那些本领辨别属于 .net remoting、asp.net web services 和 atl web services,它们具备很多共通的本领特性: 用来动静天生和运用的 xml。适合 soap 1.1 典型,囊括第 5 节 soap 源代码,这使 soap 运用之间具备很好的互操纵性。xml 保真性(非第 5 节 soap 源代码),用来实足割断的模子。wsdl(xml 计划的一种情势),用来供给证明。可用无状况编制程序模子扩充体例。运用 visual studio.net 的杰出开拓情况。 asp.net web services 和 .net remoting 还共享下列本领: xcopy 体例安置。system.net,举行搜集通信时,不管在效劳器仍旧存户端它都运转杰出。大众谈话运转时可在受控代码和线程缓冲池中重用。供给宏大的 soap 扶助,比方 soap 头和单向动静等个性。不妨与 c#、visual basic.net 或任何适合 cls 典型的谈话(如 cobol、python、 componentpascal 之类)共同运用来编写运用步调。 除去之上列出的共通特性和本领除外,asp.net web services、.net remoting 和 atl web services 还辨别为开拓职员供给了很多私有的功效,底下那些实质无助于于开拓职员在天生运用步调时控制精确的目标。即使您要天生 .asp 运用步调,asp.net web services:承诺与 asp.net http 运转时紧聚集成。激动开拓职员提防于应用 xsd 数据典型来供给运用步调。在 visual studio.net 中供给宏大的安排扶助。 即使您要天生 mts/com+ 运用步调,.net remoting:供给所有的受控代码典型体例的搜集保真性。供给在搜集上经过援用来传播东西的功效,而且可归来到一定过程中的一定东西。供给二进制通信本领。 即使您要天生 atl/c++ 运用步调,atl server:供给精巧而且可控的本机 (c++) 处置计划。创造于 atl server isapi web 运用体制组织之上(运用线程缓冲池、缓存,之类)。 将 soap 用作 web 开拓东西asp.net web services 供给了 rad 办法,以供赶快创造和运用 web 效劳。那些效劳宽松地拉拢在一道,并可与 asp.net 莫大集成。asp.net web services 是 web 开拓职员在 internet 上供给 web 效劳的首要选择本领,它的目的是供给赶快、简单、本能出色的 soap 效劳。asp.net web services 不妨和 asp.net http 引擎深刻集成,这使得熟习 microsoft web 开拓本领的开拓职员不妨简单地天生和运用鉴于 soap 的 web 效劳。asp.net 以 .asmx 文献供给对 web services 的扶助。.asmx 文献是与 .aspx 文献一致的文本文献。那些文献不妨是包括 .aspx 文献的 asp.net 运用步调的一局部。它们不妨运用 uri 寻址办法,这和 .aspx 文献沟通。以次是一个特殊大略的 .asmx 文献示例:<%@ webservice language="c#" class="helloworld" %>using system;using system.web.services;public class helloworld : webservice { [webmethod] public string sayhelloworld() { return "hello world"; }}这个文献以 asp.net 引导的 web service 发端,并将谈话树立为 c#(也不妨将谈话树立为 microsoft visual basic®、c 或大概 30 种第三方谈话中的任何一种)。而后,它将导出称呼空间 system.web.services。这个称呼空间是需要的,您必需在文献中囊括它。下一步,证明 helloworld 类。这个类从基类 webservice 导出。结果,任何要动作效劳的一局部来考察的本领在它们的出面之前将具备自设置属性 [webmethod],在 visual basic 中则为“<webmethod()>”。要使这个效劳奏效,不妨将文献定名为 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 文献由考察效劳的存户运用,而且特殊要害。考察 web serivces除去使开拓职员不妨创造 web services 的本领除外,microsoft .net 框架还供给了一套用来“运用”(即以存户端身份考察)web services 的老练东西与代码。由于 web services 鉴于大略东西考察和议 (soap) 和 http 等盛开和议,以是这种存户端本领也不妨用来运用非 asp.net web services。sdk 中有一种称为 webserviceutil.exe 的东西(在 vs ide 中运用“add web reference...”选项时机动奏效)。这个步调可用来载入 web service 的 wsdl 证明,而后创造表白这个效劳的地方的代劳类。比方,您不妨输出:webserviceutil /c:proxy /pa:http://somedomain.com/somefolder/helloworld.asmx?sdl而后,体例将创造称为 helloworld.cs 的代劳类。这个类与前方创造的类看上去特殊一致。它囊括称为 sayhelloworld 的本领,该本领归来字符串。将这个代劳类编写翻译到运用步调中,而后挪用其本领,截止是代劳类在 http 上打包 soap 乞求,并接受 soap 源代码的回应,而后封送为一个字符串。从存户端来看,代码特殊大略:dim myhelloworld as new helloworld()dim sreturn as string = myhelloworld.sayhelloworld()归来值将是“hello world”。将 soap 用作组件开拓东西创造散布式运用步调时,即使须要莫大遏制性并诉求不妨采用体例啮合水平,那么不妨运用 microsoft .net remoting。microsoft .net remoting 还供给了与大众谈话运转时的深刻集成,而且为开拓职员供给了所有的跨贯穿典型体例保真性。这囊括结构因变量、委派、重载本领、经过值和援用传播东西、类的档次构造、接口、本领、属性、字段,以及经过可插入通道、散布式标识、激活、租借存在期和 callcontext(独力于参数的 soap 头中的流东西)在贯穿上的运用步调 (web services) 之间举行 marshal by value(创造复本)以及 marshal by ref(传播 objref)。运用 .net remoting,开拓职员不妨从任何过程供给 remoting 闭幕点,囊括遏制台运用、gui 运用、nt service 和 iis。在任何运用灵验加载源代码(在产物中供给了可插入序列化方法化步调以及 soap 和二进制方法化步调)经过可插入通道举行的任何传输进程中城市展示这种情景。soap=http+xml,同声实足扶助 http 和 smtp 上的 soap 1.1,这格外令人合意。咱们不妨赢得 wsdl 扶助来证明 web service 并保护运转时典型体例的实足保真性。.net remoting 供给了 .net sdk 的 soapsuds 东西,不妨从元数据天生受控类和 com 东西的效劳证明。soapsuds 东西也运用效劳证明并天生元数据和代劳。开拓职员不妨运用聚集侦听模子,将本人的操纵动作运用步调入站和出站动静流插入。想更为深刻的开拓职员则不妨沿用运用套接字的二进制源代码 tcp 通道。.net remoting 使受控组件、本机 com/com+ 组件以及接收效劳的组件(运用 com+ 效劳的受控组件)长途化。soap、二进制以及任何一种可插入通道和方法上都大概展示那些情景。样例:soap 受控代码事变 下列代码演练怎样在两个运用步调之间激励受控代码事变。存户端有一个当地东西,备案为接受长途东西的事变报告。存户端呼唤效劳器东西时,就激励事变,爆发对存户端当地东西的回叫。效劳器端zap.csusing system;namespace zap{ // 设置事变参数 public class greetingeventargs : eventargs { public greetingeventargs(string greeting) { this.greeting = greeting; } public string greeting; } // 设置事变 public delegate void greetingevent(object sender, greetingeventargs e); // 设置效劳 public class waz : marshalbyrefobject { // 存户端将预订和废除预订此事变 public event greetingevent greeting; // 由存户端长途挪用的本领 public void hellomethod(string greeting) { console.writeline("received string {0}", greeting); // 将字符串打包到 greetingeventargs 中 greetingeventargs e = new greetingeventargs(greeting); // 激励事变 if (greeting != null) { greeting(this, e); } } }}host.csusing system;using system.io;using system.runtime.remoting;using system.runtime.remoting.channels.http;public class host{ public static void main(string[] args) { // 手动加载 http 通道。 // 这也不妨在 remoting 摆设文献中实行。 channelservices.registerchannel(new httpchannel(999)); // 备案效劳器典型。 // 这也不妨在 remoting 摆设文献中实行。 remotingservices.registerwellknowntype( "zap", // 步调集 "zap.waz", // 完备的类名 "host/waz.soap", // uri wellknownobjectmode.singleton); // 东西形式 // 实行操纵,等待用户退出 console.writeline("长机仍旧筹备好处置长途动静。"); console.writeline("请按 enter 键退出"); string keystate = console.readline(); }}存户端client.csusing system;using system.runtime.remoting;using system.runtime.remoting.channels.http;using zap;// 将东西按援用当地封送给要激励的事变public class baz : marshalbyrefobject{ public void greetinghandler(object sender, greetingeventargs e) { console.writeline("greetinghandler 回叫: 安慰: {0}\n", e.greeting); }}public class client{ public static void main(string[] args) { baz baz = new baz(); // 这也不妨在 remoting 摆设文献中实行。 // 备案 http 通道 channelservices.registerchannel(new httpchannel(0)); // 获得 soap url 代劳 waz waz = (waz)activator.getobject( typeof(waz), "http://localhost:999/host/waz.soap" ); // 预订事变: 经过 soap 举行 waz.greeting += new greetingevent(baz.greetinghandler); for (int i = 0; i < 5; i++) { // 经过 soap 向 waz 发送 waz.hellomethod("bill" + " " + i); } // 废除预订事变: 经过 soap 举行 waz.greeting -= new greetingevent(baz.greetinghandler); }}makefilemakefileall: host.exe zap.dll client.exehost.exe: host.cs csc /r:system.runtime.remoting.dll host.cszap.dll: zap.cs csc /t:library -out:zap.dll zap.csclient.exe: zap.dll client.cs csc /r:system.runtime.remoting.dll /r:zap.dll client.cs在一个窗口中启用 host.exe 文献,而后在另一个窗口中启用 client.exe 文献。您将会看到事变被激励回到存户端。这是诸多 .net remoting 运用步调中的一个小例子。.net remoting 供给了搜集上的实足 clr 受控代码典型体例,它仍旧特出的 soap 效劳器和存户端,由于它实足适合 soap 1.1 典型。将 soap 用作 atl 开拓东西atl server web services 为 c++ 开拓职员供给了在本机代码中创造和运用 web services 的简单办法。atl server 是 c++ 开拓职员在 internet 上供给和运用 web services 的首要选择本领,其安排手段是为包括 soap 的 web 运用供给赶快、简捷和莫大精巧的步调库。atl server 之以是称为 atl,是由于它展现了同声探求高本能和精巧性的 atl 目的。比方,您不妨很简单地抛开 atl server http 模子,编写您本人的安排步调,同声仍旧赢得 atl server 封送/和议代码的长处。atl server web services 运用与 com 一致的语法证明接口,便于暂时的 atl 开拓职员进修。这种与 com 一致的语法承诺开拓职员得心应手地将东西同声以 com 东西和 web service 办法供给。属性的引入大大简化了代码,使它对于非 atl 开拓职员也很简单。atl server 具备和其余一切 .net web services 举行互操纵的本领,这对那些在一个运用步调中运用多种本领的开拓职员来说格外简单。接口:新的 __interface 要害字使开拓职员很简单创造 com 东西或 web services 接口。[ uuid("d7dae6fd-aebb-4579-bd8d-866f74139501"), object]__interface iweb_service_exampleservice{ [id(1)] hresult helloworld([in] bstr bstrinput, [out, retval] bstr *bstroutput);};这是一个应用 atl server 设置 web service 接口的例子。经过 c++ 属性的应用,嵌入式 idl 属性和新的 __interface 要害字、atl server web service 接口看上去和新的属性化的 com 接口特殊一致。这边的 web service 接口样例 iweb_service_exampleservice 仅实行一个本领 helloworld。helloworld 用 bstr 动作输出并归来 bstr 动作输入。乞求处置步调:乞求处置步调是一个 c++ 类,该类经过处置步调映照来供给,而且具备经过代替本领映照来供给的本领。处置步调映照不过笔墨标签与类称呼的映照,而本领映照是类中笔墨标签与本领的映照。 [ request_handler(name="default",sdl="genweb_service_exampleservicesdl"), soap_handler( name="web_service_exampleservice", namespace="urn:web_service_exampleservice", protocol="soap" )]class cweb_service_exampleservice: public iweb_service_exampleservice{public: [ soap_method ] hresult helloworld(bstr bstrinput, bstr *bstroutput) { ccombstr bstrout(l"hello "); bstrout += bstrinput; bstrout += l"!"; *bstroutput = bstrout.detach(); return s_ok; }}; atl server 乞求处置步调模子与 web 运用和 web services 特殊一致。图 1 表露了处置乞求的模子:图 1. atl server 乞求处置模子http request 加入 iis,将乞求(鉴于 url 及其扩充)映照到符合的 isapi dll。而后,isapi dll 把在乞求中指定的处置步调(即在标签或查问参数中指定的处置步调)映照到符合的 application dll。application dll 再将这个处置步调映照到 c++ 东西。在这个模子(atl server 模子)中,web 运用步调和 web service 的独一分辨在乎结果一步。运用 web services,c++ 东西不妨解码/源代码 soap(当编写翻译器领会 soap_handler 属性时,它会插入实行此操纵的代码)。您不妨领会,这个类是从咱们的接口接受过来的,而且咱们运用 [soap_method] 属性引导将由 helloworld 本领来处置 soap 乞求。实行这种本领和实行任何其余 c++ 本领是一律的。这个 soap_handler 属性还保证机动天生灵验证明效劳的 wsdl。web service 的用户运用这个对效劳的证明(方法为 xml/wsdl),保证她们不妨以精确的方法发送/接受精确的数据。经过 atl server 运用 web services经过 atl server 运用 web services 对立来说是个比拟大略的操纵。开拓职员只需运用 “add web reference” 对话框,将它指向 .disco 文献,而后指向 wsdl,这和运用其余典型的 web 援用一律。这个对话框在后盾运转在 web service 的 wsdl 上的 sproxy.exe 适用步调(对于非本机的 .net web services 有其余一个适用步调)。该操纵将创造 web service 代劳文献,包括诉求运用所乞求的 web service 的十足 c++ 代码。运用 wsdl 中的消息,代劳天生器不妨确定 web service 要接受到的数据以及它要归来给存户端的数据。这就承诺代劳天生器创造不妨和 web service“攀谈”的头文献。您只需创造本人的 web service 类(如在天生的头文献中搜索到的一律)的范例,而且运用符合的本领即可,比方:cweb_service_exampleserviceservice myservice;ccombstr bstrout;ccombstr bstrin(l"world");myservice.helloworld ( bstrin ,&bstrout,);wprintf(bstrout);此刻,您就仍旧有一个基础的 atl server web service 和 atl server web service consumer 了。归纳正文的重要手段是对 .net 框架和 visual studio.net 中的 soap 功效作一个总体的引见。其次,就怎样创造运用 soap 的运用步调,给用户少许有

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.