C#高级编程(第四版)_OCRed_部分16.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:61 大小:8.3MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C#高级编程(第四版)_OCRed_部分16.pdf

C#高级编程(第四版)_OCRed_部分16.pdf

预览

免费试读已结束,剩余 51 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第28章Web服务.889.开发过程中不是问题,但以后应修改它。为此可以使用WebService属性,但目前不修改它。单击方法名称,可以得到SOAP请求和响应的信息,此外,还可以得到一个示例,通过该示例对如何通过HTTPGET和HTTPPOST方法获得请求和响应有一个感性的认识。另外,也可以单击Invoke按钮,对方法进行测试。如果方法需要简单的参数,在这个窗体中也可以输入它们(如果方法需要较复杂的参数,这个窗体就不允许以这种方式测试方法)。这样,就可以看到方法调用所返回的XML:<?xmlversion="1.0"encoding="utf-8"?><stringxmlns=''http://tempuri.org/''>Yeswecan!</string>这说明方法运行良好。单击图28-2的浏览器屏幕上的ServiceDescription链接,可以查看Web服务的WSDL描述。其中最重要的部分是关于请求和响应的元素类型的描述:<wsdl:types><s:schemaelementFormDefault=飞ualified"targetNamespace=''http://tempuri.org/''><s:elementname="CanWeFixIt"><s:complexType/></s:element><s:elementname="CanWeFixItResponse"><s:complexType><s:sequence><s:elementminOccurs="O"maxOccurs="1"name="CanWeFixItResult"type="s:string"/></s:sequence></s:complexType></s:element></s:schema></wsdl:types>该描述比较长,除了包含服务的各种绑定之外,还可以包含请求和响应所需类型的描述。Web服务可以使用的类型Web服务可以用于交换表28-1中所示的类型。表28-1StrirCharByteBooleanInt16Int32Int64Ulnt16Ulnt32Ulnt64DoubleGuidDecimalDateTimeXmlOualifiedNameClassstructXmlNodeDataSetenum以上所有类型的数组都可以使用,因为它们都是一般集合类型,例如List<string>。还要注意,只能编组Class和struct类型的公共属性和宇段。.890.第VI部分通信28.3.2使用Web服务上面讨论了如何创建Web服务,接下来就讨论如何使用它们。为此需要在代码中生成一个知道如何与给定Web服务进行通信的代理类。这样,代码中对Web服务进行的任何调用都要通过这个代理类,从表面看,这个代理类就等同于Web服务,代码也会认为我们有了Web服务的本地副本。而实际的情况是有许多HTTP通信工作在进行,只是我们感觉不到其中的细节。有两种方式可以完成这项任务:第一,可以使用WSDL.exe命令行工具:第二,可以使用VS.NET中的AddWebReference菜单选项。在命令行上使用WSDL.exe时,它会根据Web服务的WSDL描述生成一个包含代理类的.cs文件。使用Web服务的URL来指定该文件,例如:WSDLhttp://localhost:61968IPCSWebSrvl/Service1.asmx?WSDL注意:这里和随后的例子使用默认的文件系统存储Web应用程序。为了使上面的URL起作用,必须给Web服务运行VisualWebDeveloperWebServer。这仍不能保证Web服务的端口号(在这里是61968)是相同的。这适合于演示,因为一般我们希望Web服务位于固定的Web服务器,如IIS上,否则就必须重新生成代理类。确保Web服务可用于测试的一种方式是在一个解决方案中包含多个Web站点。这样就会在Service.cs文件中为上一小节中的示例生成一个代理类。这个代理类将以Web服务命名,在这个示例中就是Service.该代理类包含一些方法,那些方法将可以调用与同名服务的方法。在使用这个类时,只需把所生成的.cs文件添加到项目中,使用下面的代码就可以了:ServicemyService=newServiceO;Stringresult=myService.CanWeFixItO;默认状态下,生成的类将放在根命名空间中,因此不需要使用using语句,但是,可以使用WSDL.exe命令行选项/n:<namespace>指定一个不同的命名空间。这项