




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用 WSE发送带有附件的 SOAP 消息 使用 DIME 和 Web Services Enhancements WSE 中的高级 DIME 支持 对 DIME 使用 WSE 时的问题 小结 WS-Attachments 是一种推荐的 Web 服务标准,它能利用 DIME 消息封装协议来帮助在 SOAP 消息中发送附件。本文将介绍 Web Services Enhancements (WSE) 1.0 for Microsoft .NET 支持使用 DIME 和 WS-Attachments 规范来发送附件的方法。在 Web Services Enhancements 中使用 DIMEWSE v1.0 使用 ASP.NET 来支持带 SOAP 附件的 DIME,并可以从 I/O 流读取 DIME 消息或将 DIME 消息写入 I/O 流。本节介绍在 ASP.NET 中向 SOAP 消息添加二进制附件的详细过程,随后讨论 WSE 对 DIME 流的支持。WSE 运行时实现 DIME 的方法对于带有附件的 SOAP 消息,WSE 运行时实现了一个 DIME 兼容的消息分析器,用于转换传入的 DIME 消息的记录,并从第一个 DIME 记录中提取主 SOAP 消息,从后续的附件对象记录中提取封装的文件。当主 SOAP 消息从 DIME 中提取出来之后,它被传递到 WSE 消息管道中,并由一系列输入过滤器根据 WSE 支持的其他标头对其进行处理。下图显示了 WSE 运行时和 ASP.NET 处理传入的 DIME 消息的方法。图 1:WSE 运行时和 ASP.NET 处理传入的 DIME 消息 对于带附件的出站 SOAP 响应消息,WSE 中的 DIME 消息分析器构建一个新的 DIME 消息,其中第一个 DIME 记录是出站 SOAP 响应,而所有指定的附件都被封装在后续的 DIME 记录中。下图显示了 WSE 运行时组装 DIME 消息的方法。图 2:WSE 运行时组装 DIME 消息 WSE 运行时通过丰富的 API 来进行编程控制并支持 DIME。Microsoft.Web.Services.Dime 命名空间中的对象支持 DIME。对于由 ASP.NET 提供的基于 SOAP 的 Web 服务,Microsoft.Web.Services 命名空间中的SoapContext 类通过为给定的 SOAP 消息指定高级 Web 服务协议的使用和属性来控制 WSE 运行时的行为。在 WSE 编程模型中,当收到 SOAP 请求信息时,运行时为接收到的请求生成一个 HttpSoapContext 对象。HttpSoapContext.RequestContext 属性访问消息的 SoapContext 对象并枚举包含在消息的 WSE 专用标头元素中的信息。如果传入的 DIME 消息符合 WS-Attachments 规范,WSE 运行时就把它们作为带附件的 SOAP 消息来处理,并提取主 SOAP 消息及其所有附件。对于每个附件,都会向 DimeAttachmentCollection 添加一个 DimeAttachment 对象,这样就可以通过SoapContext.Attachments 属性访问这些附件。与此类似,可以向传出消息的 SoapContext 对象的 DimeAttachmentCollection 中添加附件,以便 WSE 运行时将它们包含在传出消息的 DIME 记录中。接下来,让我们看一下创建带附件的 DIME 消息作为 Web 服务响应的过程。为 DIME 配置 Web Services Enhancements要在 DIME 中使用附件,即使在 ASP.NET Web 服务器上安装了 WSE,仍然需要对 ASP.NET 应用程序进行一些额外的 DIME 相关配置。在 Microsoft Visual Studio .NET 中创建新的 ASP.NET Web 服务项目之后,需要把对 Microsoft.Web.Services.dll 程序集的引用添加到项目中。还要向 soapExtensionTypes 元素添加一个新类型,方法是在 Web.config 文件中为项目添加一个 add 元素,如下所示: . 在本例中,type 属性值不能包含分隔符或空格。如果 webServices 和 soapExtensionTypes 元素不存在,还必须将它们添加到 Web.config 文件中。WSE 设置工具是一个不受支持的 Visual Studio 外接程序,可用来方便地配置使用 WSE 的 Web 服务项目。通过安装该工具,就可以很容易地配置基于 WSE 的项目,使其使用 DIME。向使用 WSE 的 SOAP 消息添加附件假设有一个名为 ImageDimeService 的 Web 服务类,它具有一个返回二进制 JPEG 图像文件的公有方法。在服务的 .aspx 文件的内含代码页面中,应当使用 using 指令为这些命名空间创建别名,如下所示:using System.Web.Servicesusing Microsoft.Web.Servicesusing Microsoft.Web.Services.Dime在本例中,ImageDimeService 类的定义如下:WebService(Namespace=/dime/, Description=Web 服务使用 DIME 返回一个或多个 JPEG 文件。)public class ImageService : System.Web.Services.WebService .下面的 GetImage 方法实现 WebMethod,返回所请求的 JPEG 文件:WebMethodpublic void GetImage(string imageNameCollection) / 获取 SoapContext 作为响应消息 SoapContext myContext = HttpSoapContext.ResponseContext; / 创建一个数组,用于返回相关 DIME 附件的 URI。 string retUri= new stringimageNameCollection.Length; int i = 0; / 迭代器 / 为由 imageID 数组中的值指定的每个文件 / 创建一个 DimeAttachment 对象。 Foreach (string imageName in imageNameCollection) / 字符串,表示附件的文件名和路径。 string filePath = C:images + imageName + .jpg; / 使用文件名来创建新的 DIME 附件, / 并通过 MIME 媒体类型 imagejpeg / 来指定附件编码。 DimeAttachment dimeImage = new DimeAttachment( image/jpeg, TypeFormatEnum.MediaType, filePath); / 生成对附件对象的基于 GUID 的 URI 引用, / 并将其指定给 DIME 记录的 ID 属性。 dimeImage.Id = uri: + Guid.NewGuid().ToString(); / 将新的 DimeAttachment 对象添加到 SoapContext 对象中。 myContext.Attachments.Add(dimeImage); / 将生成的 URI 添加到返回的数组中。 retUrii = dimeImage.Id; i+; / 返回与附件的 ID 值匹配的 URI / 数组。 return retUri;在 WebMethod 方法中,从客户端发出的 SOAP 请求消息包含一组图像名称。对于集合中的每一个名称,Web 服务都要从 C:images 文件夹中检索关联的 JPEG 文件并将图像添加到 ResponseContext 的 DimeAttachmentCollection 中。当 WebMethod 返回时,WSE 运行时将响应消息作为主 DIME 记录,并将每个 DimeAttachment 作为一个后续记录,这些记录的顺序与它们被添加到 DimeAttachmentCollection 中的顺序相同。从 DIME 消息提取附件为了让使用 Web 服务的客户应用程序接收并处理 DIME 消息,客户端也必须安装 WSE。要使 Visual Studio 中的 Microsoft .NET 客户应用程序能够支持 WSE DIME,必须添加对 Microsoft.Web.Services.dll 程序集的引用。此外,向基于 DIME 的 Web 服务添加了 Web 引用后,必须修改 References.cs 文件中的代理类,以便从 WSE 中的Microsoft.Web.Services.WebServicesClientProtocol 类继承。例如,上面例子中生成的 ImageService Web 服务的客户端 Web 服务代理需要按以下方式修改: public class ImageService : Microsoft.Web.Services.WebServicesClientProtocol 如果客户端已经安装了 WSE 设置工具,Add Web Reference(添加 Web 引用)将自动生成一个单独的、以“Wse”结尾的代理类,该类是从相应的 WSE 类继承得到的。在这种情况下,将 ImageServiceWse 用作服务代理即可。下面的示例显示了使用 ImageService Web 服务检索多个 JPEG 文件作为 DIME 附件的方法。try / 调用 Web 方法来传递图像名称数组, / 并从返回的数组中捕获 URI 值, / 以便通过 ID 来引用附件。 string retUri = myService.GetImage(imageNameCollection);catch (Exception ex) / 处理任何异常错误。/ 检查响应消息是否包含任何附件。if (myService.ResponseSoapContext.Attachments.Count 0) / 显示每个附加的 JPEG 图像文件。 for (int i=0; i 0) myWriter.Write(bytes, 0, numBytes); / 清理 myDW.Close();值得注意的是,基于 SOAP 的 DIME 实现是将整个 DIME 消息读入内存,而对 DIME 进行流处理时,您可以使用 DimeRecord.ChunkSize 来限制需要使用的内存量。以下方法实现了相反的过程,即读取 DIME 流,并将记录内容提取到二进制流中。static void ReadFromDime(Stream dimeStr, Stream outStr) / 创建读取器,用于读取流式 DIME 消息。 DimeReader myDR = new DimeReader(dimeStr); / 创建 DimeRecord,以便(仅)读取当前的 DIME 记录。 DimeRecord myRecord = myDR.ReadRecord(); / 创建读取器,以便将记录内容读到其中。 BinaryReader myReader = new BinaryReader(myRecord.BodyStream); / 将内容写到输出流中。 int size = 4096; byte bytes = new byte4096; int numBytes; while(numBytes = myReader.Read(bytes, 0, size) 0) outStr.Write(bytes, 0, numBytes); / 清理 myReader.Close(); myDR.Close();对 DIME 使用 WSE 时的问题和 1.0 版产品一样,WSE 在支持 DIME、WS-Attachments 和相关规范的方法上,存在一些限制。这些问题包括:保护附件根据 WS-Security 规范(英文),WSE 对保护 SOAP 消息提供了全面的支持,但对以 DIME 消息形式发送的 SOAP 消息附件没有提供保护。如果告诉 WSE 对主 SOAP 消息进行签名和加密,SOAP 消息将通过 WSE SecurityOutputFilter 传输,并在此过程中得到适当的保护。只有通过各种过滤器传递,SOAP 消息才能封装为带附件的 DIME 消息,也就是说附件本身并未被保护,因为它们可以被任意 DIME 分析器读取。如果需要保护 DIME 消息中的附件,则应该使用一种 .NET 框架支持的加密机制,该机制由 System.Security.Cryptography 命名空间提供。此外,由于当前的 DIME 规范没有定义对 DIME 消息标头进行签名的方法,WSE 无法确定 DIME 消息是否
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 3.1伟大的改革开放(教学设计)2024-2025学年高一政治上学期同步教学教学设计+教学设计+练习(统编版必修1)
- 股份有限公司拆分合同6篇
- 6.3.2角的比较与运算第1课时角的比较与运算说课稿 2024-2025学年人教版(2024)数学七年级上册
- 高中信息技术 算法与程序设计-选择结构说课稿 教科版
- 1.2 有理数及其大小比较说课稿2024-2025学年人教版数学七年级上册
- 浙教版信息技术八上第2课《 常用数据类型》说课稿3
- 2025公司员工详细劳动合同样本
- 2025年的技术服务合同将如何塑造未来合同的样貌
- 2025中国员工劳务劳动合同范本
- 化肥厂化肥出口检验细则
- 农业现代化种植技术培训课件
- 中城汽车(山东)有限公司审计报告
- 大学博士竞赛试题及答案
- 钢结构彩钢瓦施工工艺与技术交底
- 2025版煤矿安全规程宣贯培训课件
- 梁启超家教家风课件
- 第5课 我们说方言教学设计-2025-2026学年小学地方、校本课程浙教版(2024)人·自然·社会
- (2025秋新版)青岛版科学三年级上册全册教案
- 顾客联络服务 人工与智能客户服务协同要求 编制说明
- 2025年全国通信专业技术人员职业水平考试(通信专业实务·传输与接入·无线)历年参考题库含答案详解(5套)
- DB31∕T 1545-2025 卫生健康数据分类分级要求
评论
0/150
提交评论