




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web Service学习笔记(1)Web Service的宗旨是创建不需要用户界面就能与其他应用程序交互的Web应用程序。举例说明它的优点,假如你正在为一家股票投资公司创建网站,你并不需要把不同证劵交易所得数据库与自己的后台数据库进行整合,因为你的应用程序可以使用Web Service,并使用XML格式交换数据。Web Service是松耦合的,它与服务器端和客户端使用的操作系统、编程语言都无关。假如你既拥有客户端又有服务器端的访问和管理权,这种情况更适合用.NET的Remoting技术,而不是Web service。创建Web Service必须保证的是,服务器端和客户端都要支持HTTP、SOAP(简单对象访问协议)和XML等行业标准协议。Web Service是如何工作的Web Service允许两个程序之间交换XML文档。在这个架构的顶层,微软实现了一个远程过程调用(Remote Procedure Call,PRC)模型。Web Service架构包括以下特性:1。WebServcie的服务器端和客户端应用程序都能够连接到互联网。2。用于进行通信的数据格式必须遵守相同的开放标准,并且在大多数情况下,这个标准几乎总是SOAP。3。客户端和服务器端的系统是松耦合的。即Web Service不关心客户端和服务器端所使用的操作系统、对象模型或者编程语言。只要Web Service和使用Web Service的应用程序都能够发送和接收遵守适当协议标准的消息即可。下图为Web Service流程的逻辑架构如图所示,一个Web Service使用着会向Web Service发出一个调用请求。使用者会认为它通过Internet直接和Web Service进行交流,当然这实际上是个幻象。实际上,真正的调用由代理类完成。代理类对于Web Service使用者来说是一个本地类。代理会处理所有的负责的复杂架构,包括通过Internet发送请求道服务器、从web Service取回结果并呈现给Web Service使用者。由于代理类在之前已在消费程序中注册,所有一切工作才可以顺利进行。注册有开发消费程序的程序员完成。开发Web Service开发Web Service的流程与开发网页的流程近乎一致:1。所有构成网页和服务的源文件都是文本文件,它们可以使用任何文本编辑器创建和修改。而类文件可以在控制台命令行中通过命令工具进行编译。2。可以在vs2005及以上版本中创建网页和Web Service3。网页和Web Service既可以使用代码隐藏模型,也可以使用内联编码(inline coding)模型。Web Service中不需要使用代码隐藏技术,因为Web Service并不包括任何可视化内容。4。网页和Web Service都充分利用了CLR和.NET Framework。.aspx文件用于定义网页,而.asmx文件用于定Web Service,我们可以吧Web Service想象成类,类中的一些方法通过Internet被暴露给客户端。代理客户端应用程序如果使用Web Service,必须先创建一个代理。代理是要调用的真正代码的替身,它负责在机器边界引导调用。在代理在客户端应用程序中注册后,客户端应用程序调用方法就如调用本地对象一样。代理接受该调用,并以适当格式封装调用,然后以SOAP请求发送调用到服务器。当服务器返回SOAP包给客户端后,代理会对包进行解密,并且如同从本地对象的方法返回数据一样将其返回给客户端应用程序。如下图所示:协议与标准(HTTP、XML、SOAP)HTTP:TCP/IP协议的最上层是超文本传输协议(HTTP)。它是用于在网络之间使用服务器和浏览器实现通讯,主要包括在服务器和浏览器建立连接,并将HTML传输到客户端浏览器。当客户端向服务器发送HTTP请求后,服务器就开始处理请求。通常,会返回HTML页面,然后通过浏览器呈现。然而对Web Service而言,服务器返回的是SOAP消息,消息中包含了被调用的Web Service方法的返回数据。HTTP请求从请求的浏览器出传递名称和值到服务器,这种请求包括GET和POST两种。GET请求中,名称和值会被附加到url上,数据是未加密的。当所有需要传递的数据可以使用名称和值成对表示,而且只需要传递少量字段,字段长度较短时,比较适合GET请求。另外,如果不需考虑安全问题时,也可以使用GET。POST请求中,配对的名称和值是作为请求消息的一部分发送的。当有大量字段或者参数很长时,适合使用POST请求。从安全方面看,POST比GET更安全,因为POST请求可以被加密。和GET请求一样,POST请求无法传递复杂的数据类型(如类、结构体和DataSet)。XML:是有W3C公布的开放标准的一种描述数据的方法。XML和HTML十分类似。不同的是HTML使用的是预定义元素,这些元素规定了HTML在浏览器中如何显示,而XML的元素则是由开放人员自己定义的,所以几乎所有的数据都可以表示。制定XML的目的是为了使其成为一种平台无关、语言无关的标准。XML架构(Schema)是用于定义元素已经XML文档中或者许多XML之间元素与元素之间关联的文件。在架构中将指定元素名称和内容类型。HTML与XML的显著差别:大多数HTML读取器有很好的容错能力,而XML读取器则完全不同,所以XML文件的格式必须正确。另外,XML元素都是小写的。SOAP:(simple object access protocol,简单对象访问协议)是一种用于控制数据交换的XML语法。它是简单的、轻量级的信息交换协议。SOAP消息有消息内容和一个或多个头模块组成,并且封装在SOAP envelope中。SOAP使用XML语法来格式化内容。在设计上,SOAP尽可能简单并且提供最小化的功能。SOAP不需HTTP的GET和POST,它不受“名称/值”对的限制,我们可以使用它来发送复杂的对象,包括DataSet、类和其他对象。SOAP的缺点:SOAP消息十分冗长,因此如果存在带宽或者传输性能的问题,建议使用POST或GET.Web Service学习笔记(2)创建一个简单的Web Service上一章节中提到Web Service与网页的相似之处,这里在总结下:1。由和通用语言运行时完全实现,包含面向对象架构,所有基类,还有一些特性,如缓存、状态和数据访问2。几乎一致的文件和代码结构3。所有源代码文件都是普通文本4。vs完全支持,可以使用vs十分便捷的编辑、调试5。使用一个基于普通文本的配置文件和vs的网站管理工具做全局或者应用程序级配置。Web Service没有界面,它只有方法,有一些事支持从客户端远程调用的。Web Service文件的后缀名为asmx。在Web Service应用程序第一次运行时,如果Web Service是人工编译的,并且被放在虚拟跟目录的bin目录下,那么代码隐藏对于内联编码有性能优势,因为asmx文件在Web Service运行时都会被编译成一个类。而ASP.NET 2.0在默认情况下没有这一优势,因为ASP.NET 2.0 把源代码放在App_Code目录下,并且在第一个使用时编译。下面是一个实例(股票跟踪,不使用数据库,只是为了演示,故使用二维数组)这个Web Service提供两个方法:GetName:参数是一个StcokSymbol对象,返回一个字符串,内容是股票名称GetPrice:参数是一个StcokSymbol对象,返回一个数字,表示当前股票的价格我使用的是vs2010,首先新建一个项目(WebSite也可以),注意选择.NET Framework 3.5,默认4是没有Web Service选项的。选择ASP.NET Web Service Application,命名为StockWebService,如图我们可以看到,vs自动为我们生成了一些代码:/ / Summary description for Service1/ WebService(Namespace = /)WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)System.ComponentModel.ToolboxItem(false)/ To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. / System.Web.Script.Services.ScriptServicepublic class Service1 : System.Web.Services.WebServiceWebMethodpublic string HelloWorld()return Hello World;在Service类中,有一个名为HelloWorld的模板方法,它将返回一个字符串。这个方法使用WebMethod特性做修饰,表示该方法对Web Service使用程序可用。WebMethod特性会在后面解释。按F5运行程序,可以看到如图所示 添加以下方法WebMethodpublic double GetPrice(string stockSymbol)for (int i = 0; i stocks.GetLength(0); i+)if (string.Compare(stockSymbol, stocksi, 0, true) = 0)return Convert.ToDouble(stocksi, 2);return 0;WebMethodpublic string GetName(string stockSymbol)for (int i = 0; i stocks.GetLength(0); i+)if (string.Compare(stockSymbol, stocksi, 0, true) = 0)return stocksi, 1;return Symbol not found.;重新运行项目,发现多了两个方法调用的入口。Web Service指令普通的.aspx文件把Page指令作为第一行代码,而Web Service则有一个WebService指令(直接在vs不能看到,可以找到文件Service1.asmx右击编辑):Language:指定Web Service中使用的语言,不是必需的 Class:指定Web Service的类名称,必需的CodeBehind:如果这个类没有包含在Web Service文件的代码中,且类没有被手工编译并放在bin子目录下,WebService指令的CodeBehind属性则用于指定实现WebService类的源代码文件的名称。Debug:如果设为true,将以启用调试的方式编译Web Service。默认为false从WebService类继承虽然是可选选项,但是它有几个优点,主要优点是可获得对ASP.NET几个常见对象的访问权:Application对象和Session对象(状态管理)、User对象(验证Web服务器调用者的身份)、Context对象(可以访问HttpContext类中调用者请求的所有特定HTTP信息)当然也不可不继承WebService类,可能是为了克服来自.NET Framework的限制。通过HttpContext控制Application状态Web Service可通过HttpContext控制Application对象(也可以访问所有的ASP.NET资源)例:在Service1.asmx.cs中添加如下方法:/ / set exchange of stock/ / WebMethodpublic void SetStockExchange(string exchange)Applicationexchange = exchange;WebMethodpublic string GetStockExchange()return Applicationexchange.ToString();WebServiceBinding特性Web Service描述语言(WebServices Description Language,WSDL)定义的绑定可作为.NET类访问WebService的接口。即绑定会定义一系列操作。一个WebService类有一个默认的绑定,它包含该类的所有Web方法,该类不存在与非默认绑定的关联。WebServiceBinding特性用于识别非默认绑定。WebService类可以具有多个WebServiceBinding特性,每一个都可以指定不同的绑定。如果Name属性被忽略,那个这个特性将指定默认绑定。属性类型读写说明ConformsToWsiProfiles绑定需要遵守的WS-1标准EmitConformanceClaimsBoolean如果为true,当WSDL描述时,绑定会发出遵守的声明LocationString定义绑定的位置,默认值为当前Web Service的URLNameString绑定名称NamespaceString与绑定关联的命名空间WebMethod特性Web Service由WebService类定义的,对于WebService类而言,并不需要将所有的方法提供给Web Service使用者。对需要提供的方法,须:1。声明为public2。在方法声明之前设置WebMethod特性(即加上Web Service)WebMethod包含一些属性,用于设定web方法的行为。语法:WebMethod(PropertyName=value),以下是一些属性的说明BufferResponse:默认情况下,ASP.NET在从服务器端向客户端发送响应之前,会对整个响应进行缓存。多数情况下,这是最好的做法。但是,如果响应非常长,那么需将 它设为false类禁用缓存,如果设为false,则返回到客户端的响应时16kb的块。默认值为trueCacheDuration:如同网页,Web Service也能够把返回到客户端的结果进行缓存(有点:如果客户端发出的请求与由另一个客户端发出的请求完全一致是,那么服务器就返回缓存中的响应,可以改善性能)。CacheDuration定义第一次请求之后的多少秒内,会在响应中将缓存页被发送给随后的请求。一旦缓存过期,则发送新页面给请求。默认值为0,即禁用结果缓存。如果web方法返回的数据没有改变(如:从一小时更新一次数据库中获取数据的查询),那么就可以设置结果缓存为一个合适的时间,例如1800(30分钟)。令一方面,如果返回的数据是动态的,那么需要设置缓存持续时间较短或干脆禁用。如果Web Service没有一个相对有限的参数范围,缓冲也不适合使用。Description:对web方法的描述,字符串类型EnableSession:默认为false。如果设为true,web方法将启用会话状态。如果设为ture且Web Service继承自WebService类,那么会话可以使用WebService.Session。允许会话状态为应用程序增加了额外的开销。MessageName:在C#类中,方法可以拥有相同的名字(重载),Web Service禁止使用重载。WebMethod特性的MessageName属性可以消除由多个相同名称造成的无法识别的问题。它允许对每一个方法的重载使用唯一的别名。当重载方法在SOAP消息中引用时,SOAP消息将使用MessageName而非方法的名称。TransactionOption:ASP.NET web方法可以使用事务,但是仅当事件在web方法中初始化时可以使用。TransactionOption属性用于设置web方法是否启动一个事务。然而,因为web方法的事务必须为根对象,所有只有两个不同的行为,启用一个新对象(Required、RequiresNew)或者不启动(Disabled、NotSupported、Supported)。如果在Web Service中启用事务,需:1。添加System.EnterpriseServices.dll引用 ;2。添加命名空间(using System.EnterpriseServices;);3。向WebMethod特性添加TransactionOption属性,并设置为Required(或RequiresNew)。Web Service学习笔记(3)WebService特性WebService特性(不要把它与WebMethod混淆)允许向Web Service添加额外的信息。语法:WebService(PropertyName=value),如果有多个属性,可以使用逗号分隔。下面是它的一些属性:Description:描述Web ServiceName:当在浏览器中测试页面时,在Web Service帮助页面的最顶部会显示Web Service的名称,且对所有潜在的Web Service使用者可用。默认情况下,Web Service的名称是实现Web Service的类的名称。Namespace:每个Web Service都有一个XML命名空间。XML命名空间允许你在XML文档中创建名称,这个名称是一个统一资源标识符(URI)。Web Service使用在XML中定义的WSDL文档描述。每个WebService特性必须有一个独立的XML命名空间,这样它才能够为应用程序唯一识别。vs创建的Web Service的默认URI为。通常使用唯一的名称来定义一个新的命名空间,例如公司的网站。(这个可以不是一个有效的URL)。数据类型Web Service可以使用任何CLR支持的数据类型作为参数或者返回值。除了基本数据类型以为,还可以使用数组和基本类型的ArrayList。由于数据是通过XML在Web Service和客户端之间传递的,那么无论使用参数或返回值,都必须使用XML Schema或者XSD表示。类和结构体:Web Service能够把用户定义的类和结构体作为参数或者返回值,这里有一些需要记住的规则:1。所有类变量必须是基本数据类型或者基本数据类型的数组;2。所有类变量必须是公开的或者有一个公开的实现get和set访问器的属性DataSets:Web Service能够通过XML编码后返回任何数据,这也包括返回DataSet,这是因为ADO.NET内部使用XML来表示DataSet。一个DataSet仅是ADO.NET数据存储中的一种可以由Web Service返回的类型而已。创建发现文档一旦创建完成Web Service,负责开发Web Service使用程序的开发人员需要找到一种方法,从而能够了解服务器上有哪些Web Service可用,这些Web Service提供了哪些方法,这些方法和属性可接收哪些参数,以及这些Web 方法返回的值是什么。这个过程叫发现,是可选的。如果Web Service使用程序的开发者了解这些Web Service文件的URL,那么就不需要实施发现动作了。可以使用disco.exe在命令行方式下创建XML文件(即发现文档)。打开vs命名提示符(注意不是在运行里输入cmd出来的那个命令提示符)输入:disco /out: http:/localhost:7953/Service1.asmx通过以下两种方法发现发现文档:1。通过查询字符串实现发现,即在service.asmx文件后加上?disco,如http:/localhost:7953/Service1.asmx?disco2。静态发现文件。如果Web Service得使用程序需要使用静态发现文件,那么Web Service开发人员必须创建一个静态发现文件。发现是一个过程,它是用来寻找那些Web Service可用、Web Service提供了哪些方法和属性、方法和那些参数和属性,已经web方法返回的数据类型和属性。它是一个可选过程。为了实现在客户端机器上,从命令行执行disco工具,并把Web Service的URL作为参数传递给它,如disco http:/localhost:7953/Service1.asmx,这个命令将搜索指定URL来寻找一个发现文档,并把它们保存在本地计算机的当前目录。还有一个.wsdl文件也将在当前目录生成并保存。也可以使用/out:参数将输出目录改为指定的目录。如:disco /out:C:/Temp/ http:/localhost:7953/Service1.asmx,执行该命令会把两个文件生成到输出目录的Service1.wsdl文件中,这个文件与通过在浏览器中输入.asmx?wsdl或者使用wsdl命令生成的wsdl是相同的。下面是disco命令的参数说明/domain:domain指定连接到要求身份验证的代理服务器时要使用的域名。/nosave不要将发现的文档或结果(.wsdl、.xsd、.disco 和 .discomap 文件)保存到磁盘中。默认为保存这些文档。/nologo取消显示 Microsoft 启动标题。/out:directoryName指定用于保存所发现文档的输出目录。默认为当前目录。/password:password指定当连接到要求身份验证的代理服务器时要使用的密码。/proxy:URL指定用于 HTTP 请求的代理服务器的 URL。默认为使用系统代理设置。/proxydomain:domain或/pd:domain指定连接到要求身份验证的代理服务器时要使用的域。/proxypassword:password或/pp:password指定当连接到要求身份验证的代理服务器时要使用的密码。/proxyusername:username或/pu:username指定连接到要求身份验证的代理服务器时要使用的用户名。/username:username指定连接到要求身份验证的代理服务器时要使用的用户名。/?显示该工具的命令语法和选项。 部署部署Web Service与部署网页差不多。.asmx文件必须位于IIS提供的虚拟目录中,这样它才可以被浏览器访问到。如果有一个Web Service的.disco文件,那么这个文件也必须放在应用程序虚拟目录下。同样,如果应用程序需要创建一个web.config文件,那么也必须复制到应用程序虚拟目录中。预编译程序集和使用网页一样,对于已编译的类和资源,既可以使用预编译的assemblies,也可以使用动态编译的assemblies来处理。使用vs创建客户端下面用一个实例来创建客户端程序来调用前面章节创建的Web Service(即StockWebService)新建一个应用程序(也可以是winform窗体程序),右击解决方案,选择添加Web引用,如下图所示弹出如下图的添加Web引用的界面。在URL中输入http:/localhost:7953/Service1.asmx,即web service的地址,注意此时web service需处于运行状态,点击右边的箭头,会将该web service中的方法查询出来,我们可以点击某个方法看具体的信息,如点击GetName ,则会出现调用的参数及SOAP、POST、GET对应的XML文档。如下图所示:填写web引用的名字后就可以添加web引用了。此时会发现应用程序中多了一些文件,此时的目录结构如下图所示:双击刚刚添加的web引用的名称localhost打开对象浏览器,可以看到web Service项目下的一些事件及参数,其中:方法名+Completed+EventArgs表示事件参数,方法名+Completed+EventHandler表示事件处理方法。如下图所示:查看应用程序的目录,发现生成了两个目录Service References和Web References,其中Web References目录下存放的是我们刚才添加的web引用,里面的四个文件为:Reference.cs、Reference.map、Service1.disco和Service1.wsdl。并且在web.config中自动添加了如下的代码: http:/localhost:7953/Service1.asmx 然后再后台代码中就可以调用web service了,注意有一个类为Testttt,这是我们重命名的一个Service。 后台调用代码如下: protected void Button1_Click(object sender, EventArgs e)localhost.Testttt proxy = new localhost.Testttt();Response.Write(web: + proxy.GetName(a);即在页面放一个button,点击button后返回Name,这样运行的结果为web:Symbol not found. 当然,我们也可以把Web Service发布到IIS,至于怎么配置IIS,这个可以参考我的博客/alexis/archive/2010/04/10/1708922.html 还有一个要注意的是,如果你用的是.net framework 4的话,那么需要注册一下,以管理员身份运行命令提示符,转到C:WindowsMicrosoft.NETFrameworkv4.0.30128(不一定是这个目录,反正类似),然后使用aspnet_regiis -i命令注册。接下来就是要发布Web Service。用管理员身份运行vs,右击解决方案,选择发布,选择发布到IIS,建立虚拟目录,发布。在浏览器中输入地址(没有端口号,即默认80)可测试是否发布成功。发布成功后,可以参照上面的方法调用Web Service,只不过此时是IIS提供Web Service。Web Service学习笔记(4)Web Service之客户端代理代理类文件:在客户端使用程序中生成的Reference.cs的文件即代理类,Service1.wsdl为相应的XML文件代理类说明:1. 代理类开始是引出一系列的命名空间,代码的主题是定义一个跟待访问的Web服务类同名的 从System.Web.Services.Protocols.HttpGetClientProtocol派生的代理类2. 代理类具有如下四个方法2.1 不带参数的构造函数构造函数主要是设定代理类的URL属性,这个属性表示WEB服务的URL.2.2 doSearch方法该方法是WEB服务的doSearch方法的本地代理版本,该方法被一个HttpMethodAttribute所标注,其目的是指示如何序列化发送到 WEB服务的doSearch方法的参数以及如何反序列化WEB服务的响应.如果采用HTTP-GET调用WEB服务的方法,则必须把 HTTPMothodAttribute的ReturnFormatter属性设置为 XmlReturnReader,ParameterFormatter属性设置为UrlParameterWriter.方法的返回值也被一个XmlRootAttribute特性所标记.该特性用以将类,结构,枚举或结口标记为XML文档实例的根(或项级)元素.该特性的 ElementName属性表示返回值对应的XML元素的名称,Namespace属性表示XML根元素的命名空间,IsNullable属性表示返回值为空时ElementName所指的无素是否包xsi:nil属性.以上特性其实代替了我在C#分类中所讲的利用HTTP-GGET;HTTP-POST来获得WEB服务中的设置URL,在URL中附中参数,以及从返回XML文档中提结果的大段代码再来看看方法中的代码return (string)(this.Invoke(doSearch, (this.Url + /doSearch), new object keyword);上述代码先调用一个Invoke方法,(该方法继承自父类HttpGetClientProtocol),然后把调用结果强制转化为字符串类型.Invoke方法的原型:protected Object Invoke(string MethodName,string RequestUrl,Object Parameters);参数:MethodName-表示要调用的Web服务的名称,本例中的“doSearch“参数:RequestUrl-表示WEB服务的方法的URL,它是由WEB服务的URL加上/方法名组成参数:Parameters-是一个对象数组,包含要传递到远程WEB服务的参数,数组中的顺序与派生类的调用方法中的参数顺序对应返回值包含派生类方法的返回值和所有引用或输出参数的对象数组2.3 BegindoSearch方法这个方法用以启动对WEB服务的doSearch方法的异步调用BegindoSearch的参数:keyword:参数.callback: AsyncCallback类型的委托对象,当异步调用结束后,callback所代表的函数将被回调,用来接收结果.AsyncCallback委托原型:Serializablepublic delegate void AsyncCallback(IAsyncResult ar);其: IAsyncResult接口:用于监视和管理异步操作.IAsyncResult接口的原型public interface IAsyncResultobject AsyncStateget;/返回被作为最后一个参数提供的对象WaitHandle AsyncWaitHandleget;/返回WaitHandle,它可用于执行WaitHandle.WaitOne,WaitAny,WaitAll,以实现同步bool CompletedSynchronouslyget;/如果开始操作同步完成,则CompletedSynchronously=trueboolIsCompletedget;/在服务器完成调用处理后IsCompleted=true2.4 EnddoSearch方法这个方法用以结束异步调用,并获得调用结果代理的作用:客户端应用程序如果使用Web Service,必须先创建一个代理。代理是要调用的真正代码的替身,它负责在机器边界引导调用。在代理在客户端应用程序中注册后,客户端应用程序调用方法就如调用本地对象一样。代理接受该调用,并以适当格式封装调用,然后以SOAP请求发送调用到服务器。当服务器返回SOAP包给客户端后,代理会对包进行解密,并且如同从本地对象的方法返回数据一样将其返回给客户端应用程序。代理的生成:1。可以使用vs自动生成一个代理,并在使用程序中通过将web引用添加到程序中,注册该代理;2。可以是用wsdl.exe命令来创建代理类源码。下面是手工生成代理类的步骤:1、vs的命令提示工具,输入:C:wsdl http:/localhost/StockWebService/Service1.asmx /n:localhost,其中,localhost是自定义的命名空间。提示如下:Microsoft (R) Web 服务描述语言实用工具Microsoft (R) .NET Framework,版本 1.1.4322.573Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.正在写入文件“C:Service1.cs”。2、注意,此时在C:盘(其实就是命令提示符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水痘疫苗培训课件
- 杖类助行器腋拐山东医学高等专科学校康复医学教研室72课件
- 水电安装基础知识培训课件
- 2025版老房改造砌墙抹灰加固合同范本
- 二零二五年典当业务风险评估与应对咨询合同
- 二零二五年度工业地产项目开发商合同
- 二零二五年度车辆租赁续约合同:新能源车辆租赁服务
- 二零二五版建筑行业公对公借条及对公借款合同范本
- 2025版综合能源服务项目施工廉政监督协议
- 2025版环保设备制造分包合同样本
- 2023分布式光伏电站安装作业指导书
- 红星照耀中国选择题及答案50道
- (完整word版)高中英语3500词汇表
- 开放性伤口止血包扎技术课件
- 重症患者中心静脉导管管理中国专家共识(2022版)
- 环境综合应急预案
- 氯甲烷泄露应急预案
- 2.PaleoScan详细操作流程
- PLC西门子S7-1200应用技术完整全套教学课件
- 苏州银行总行信息科技部招聘考试真题2022
- 安装电工电气调试员安全技术操作规程
评论
0/150
提交评论