[转]如何:定义和处理 SOAP 标头
本文转自:http://msdn.microsoft.com/zh-cn/library/vstudio/8728chd5(v=vs.100).aspx
本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation .
代码示例
使用 ASP.NET 创建的 Web 服务可以定义和操作 SOAP 标头。通过在特定 SOAP 标头中定义表示数据的类并从 SoapHeader 类派生它,便可完成 SOAP 标头的定义。
定义表示 SOAP 标头的类
创建一个从 SoapHeader 类派生的类,其名称与 SOAP 标头的根元素匹配。
C#复制public class MyHeader : SoapHeader
VB复制Public Class MyHeader : Inherits SoapHeader
添加公共字段或属性,使其名称和每个元素的各个数据类型与 SOAP 标头中的对应项匹配。
例如,给定以下 SOAP 标头,后面的类定义一个表示该 SOAP 标头的类。
C#复制<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><MyHeader xmlns="http://www.contoso.com"><Created>dateTime</Expires><Expires>long</Expires></MyHeader> </soap:Header>public class MyHeader : SoapHeader {public DateTime Created;public long Expires; }
VB复制Public Class MyHeader : Inherits SoapHeader Public Created As DateTimePublic Expires As Long End Class
处理 Web 服务内的 SOAP 标头
向实现表示 SOAP 标头的类型的 Web 服务的类中添加一个公共成员。
C#复制[WebService(Namespace="http://www.contoso.com")] public class MyWebService {// Add a member variable of the type deriving from SoapHeader.public MyHeader timeStamp;
VB复制<WebService(Namespace:="http://www.contoso.com")> _ Public Class MyWebService' Add a member variable of the type deriving from SoapHeader.Public TimeStamp As MyHeader
向旨在处理 SOAP 标头的每个 Web 服务方法应用一个 SoapHeader 特性。将 SoapHeader 特性的 MemberName 属性设置为在第一步中创建的成员变量的名称。
C#复制[WebMethod][SoapHeader("timeStamp")]public void MyWebMethod()
VB复制<WebMethod, SoapHeader("TimeStamp")> _ Public Sub MyWebMethod()
在应用了 SoapHeader 特性的每个 Web 服务方法内,访问在第一步中创建的成员变量,以处理在 SOAP 标头中发送的数据。
C#复制[WebMethod][SoapHeader("myHeaderMemberVariable")]public string MyWebMethod() {// Verify that the client sent the SOAP Header.if (timeStamp == null) timeStamp = new MyHeader();// Set the value of the SoapHeader returned to the client.timeStamp.Expires = 60000;timeStamp.Created = DateTime.UtcNow;return("Hello World!");}
VB复制<WebMethod,SoapHeader("TimeStamp", _Direction:=SoapHeaderDirection.InOut)> _ Public Function MyWebMethod() As String' Process the SoapHeader.If (TimeStamp Is Nothing) ThenTimeStamp = New MyHeaderEnd IfTimeStamp.Expires = 60000TimeStamp.Created = DateTime.UtcNowReturn "Hello World!"End Function
示例
下面的代码示例演示如何在使用 ASP.NET 创建的 Web 服务中定义和处理 SOAP 标头。MyWebService
Web 服务有一个名为 myHeaderMemberVariable
的成员变量,该变量属于从 SoapHeader (MyHeader
) 派生的类型并设置为 SoapHeader 特性的 MemberName 属性。此外,还对指定 myHeaderMemberVariable
的 MyWebMethod
Web 服务方法应用了 SoapHeader 特性。在 MyWebMethod
Web 服务方法内,访问 myHeaderMemberVariable
可获得 SOAP 标头的 Username
XML 元素的值。
<%@ WebService Language="C#" Class="MyWebService" %> using System.Web.Services; using System.Web.Services.Protocols;// Define a SOAP header by deriving from the SoapHeader class. public class MyHeader : SoapHeader {public DateTime Created;public long Expires; }[WebService(Namespace="http://www.contoso.com")] public class MyWebService {// Add a member variable of the type deriving from SoapHeader.public MyHeader myHeaderMemberVariable;// Apply a SoapHeader attribute.[WebMethod][SoapHeader("myHeaderMemberVariable")]public void MyWebMethod() {// Process the SoapHeader.if (myHeaderMemberVariable.Username == "admin"){// Do something interesting.}} }
在上一示例中,如果对 MyWebMethod
的 SOAP 请求有一个 MyHeader
SOAP 标头,并且有一个 UserName
元素设置为 Admin
,则会执行附加代码。也就是说,下面的 SOAP 请求会导致该代码执行。
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><MyHeader xmlns="http://www.contoso.com"><Created>dateTime</Created><Expires>long</Expires></MyHeader></soap:Header><soap:Body><MyWebMethod xmlns="http://www.contoso.com" /></soap:Body> </soap:Envelope>
另请参见
参考
SoapHeader SoapHeaderAttribute SoapUnknownHeader SoapHeaderException
概念
生成 XML Web services 客户端
其他资源
使用 SOAP 标头 使用 ASP.NET 的 XML Web services
[转]如何:定义和处理 SOAP 标头相关推荐
- java soap 头_如何在Java中添加Soap标头
我有一个来自oracle的NO.net Web服务,要访问,我需要添加soap标头.如何在Java中添加soap标头? Authenticator.setDefault(new ProxyAuthen ...
- SOAP 1.1 - 学习
SOAP 1.1 --- 每天发送SOAP request,不搞明白啥叫SOAP,惭愧 SOAP 1.1 XML 架构定义 <xs:schema xmlns:xs="http://ww ...
- SOAP:简单对象访问协议
见:https://baike.baidu.com/item/%E7%AE%80%E5%8D%95%E5%AF%B9%E8%B1%A1%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE ...
- restful soap_Web服务面试问题– SOAP,RESTful
restful soap Welcome to the Web Services Interview Questions with detailed answers. Recently I have ...
- 对于SOAP协议的全面介绍
学习了一段时间的网络协议 , 相信大家已经对一些常规的网络协议有所了解了.那么这里我们主要介绍一下SOAP协议的内容.SOAP协议:简单对象访问协议(SOAP:Simple Object Access ...
- SOAP(简单对象访问协议) 1.1规范简介
SOAP(简单对象访问协议) 1.1规范简介 SOAP(Simple Object Access Protocal ,简单对象访问协议 ) 技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的 ...
- SOAP Web服务
根据W3C定义,SOAP是什么 " SOAP是一种轻量级协议,旨在在分散的分布式环境中交换结构化信息. 它使用XML技术来定义和扩展消息传递框架,从而提供可以在各种基础协议之间交换的消息构造 ...
- soap开票服务器系统,使用 SOAP 服务
使用 SOAP 服务 为阐明 Web 服务的众多特性,先以一个简单的华氏温度到摄氏温度转换器作为示例服务开始介绍. ♦ 设置简单的 Web 服务服务器 创建数据库. dbinit ftc 使用此数据 ...
- 用WSDL定义Web服务
在Web服务的世界里,应用程序基本上由远程的.XML驱动的组件构成,这些组件采用不同的语言编写,再采用标准的远程激活协议通过Web连接.服务提供者定义所提供服务需要用到的数据格式.同样的,当你在以 ...
- 在 ASP.NET Core 中使用 HTTP 标头传播
前言 我们常用 JWT 令牌用于身份验证,前端一般是在请求中包含 HTTP 标头 Authorization 实现. 但是,当服务间需要互相调用时,也需要"按原样"将标头传播到目标 ...
最新文章
- 剑指offer:面试题15. 二进制中1的个数
- java开发面试复试_面试java开发,面试官会问哪些问题?
- 刚刚,Python 3.10 正式发布了!我发现了一个可怕的功能...
- Python学习笔记(列表和元组的简单实用)
- 诗与远方:无题(二十一)
- python自动化办公要学多久-基于python实现自动化办公学习笔记
- 国际图形学大会(SIGGRAPH)2017届主席竞选答辩是如此场景
- css修改单选按钮样式
- 如何将PDF分成每页单独的PDF?3种PDF拆分的方法
- 获取本机内网、外网ip
- S3C2440C语言点灯
- 这程序还厉害的。。。
- Android 9 Audio系统笔记:AudioFlinger音频流处理流程
- 如何应对团队协作的五大障碍
- TCP/IP网络通信协议
- Android初级,Toast的带图片显示
- 802.11--802.11ac协议
- hbuilder 断点_Hbuilder配置php断点调试
- 慧荣SM2269XT量产开卡成功,附SM2269XT量产工具、开卡软件
- antd 表格分页功能
热门文章
- Java读取文本文件中文乱码问题
- mysql 改变 执行计划_诡异的MySql执行计划的更改
- mycat是什么_MyCat
- python虚拟环境搭建learning_log_vscode Python 虚拟环境搭建
- css中如何实现导航栏横向,css横向导航栏
- Futter基础第5篇: 实现列表、动态列表【ListView、ListView.builder】
- Android-【报错】java.lang.ClassCastException: .MainActivity cannot be cast to java.lang.Runnable
- rk3399_android7.1 USB Type-A的配置
- 第一讲:使用html5——canvas绘制奥运五环
- MVC 添加Area