本文转自: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 标头的类

  1. 创建一个从 SoapHeader 类派生的类,其名称与 SOAP 标头的根元素匹配。

    public class MyHeader : SoapHeader
    
    Public Class MyHeader : Inherits SoapHeader
    
  2. 添加公共字段或属性,使其名称和每个元素的各个数据类型与 SOAP 标头中的对应项匹配。

    例如,给定以下 SOAP 标头,后面的类定义一个表示该 SOAP 标头的类。

    <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;
    }
    Public Class MyHeader : Inherits SoapHeader
    Public Created As DateTime
    Public Expires As Long
    End Class

处理 Web 服务内的 SOAP 标头

  1. 向实现表示 SOAP 标头的类型的 Web 服务的类中添加一个公共成员。

    [WebService(Namespace="http://www.contoso.com")]
    public class MyWebService
    {
    // Add a member variable of the type deriving from SoapHeader.
    public MyHeader timeStamp;
    <WebService(Namespace:="http://www.contoso.com")> _
    Public Class MyWebService
    ' Add a member variable of the type deriving from SoapHeader.
    Public TimeStamp As MyHeader
  2. 向旨在处理 SOAP 标头的每个 Web 服务方法应用一个 SoapHeader 特性。将 SoapHeader 特性的 MemberName 属性设置为在第一步中创建的成员变量的名称。

        [WebMethod]
    [SoapHeader("timeStamp")]
    public void MyWebMethod()
        <WebMethod, SoapHeader("TimeStamp")> _
    Public Sub MyWebMethod()
  3. 在应用了 SoapHeader 特性的每个 Web 服务方法内,访问在第一步中创建的成员变量,以处理在 SOAP 标头中发送的数据。

        [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!");
    }
        <WebMethod,SoapHeader("TimeStamp", _
    Direction:=SoapHeaderDirection.InOut)> _
    Public Function MyWebMethod() As String
    ' Process the SoapHeader.
    If (TimeStamp Is Nothing) Then
    TimeStamp = New MyHeader
    End If
    TimeStamp.Expires = 60000
    TimeStamp.Created = DateTime.UtcNow Return "Hello World!"
    End Function

示例

下面的代码示例演示如何在使用 ASP.NET 创建的 Web 服务中定义和处理 SOAP 标头。MyWebService Web 服务有一个名为 myHeaderMemberVariable 的成员变量,该变量属于从 SoapHeader (MyHeader) 派生的类型并设置为 SoapHeader 特性的 MemberName 属性。此外,还对指定 myHeaderMemberVariableMyWebMethod 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>

另请参见

[转]如何:定义和处理 SOAP 标头的更多相关文章

  1. HTTP 和 SOAP 标头 来传递用户名密码 验证webservice用户认证

    支持自定义的 HTTP 和 SOAP 标头 注意:本主题中的内容适用于 Microsoft Office SharePoint Server 2007 SP1. 对于 Web 服务,您可以使用 HTT ...

  2. SOAP 介绍

    简介 SOAP(Simple Object Access Protoco)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于 XML 的协议.此协议规范由 IBM.Microso ...

  3. SOAP 简单对象访问协议

    webService三要素 SOAP.WSDL(WebServicesDescriptionLanguage).UDDI(UniversalDescriptionDiscovery andIntegr ...

  4. [Postman]发出SOAP请求(18)

    使用Postman发出SOAP请求: 将SOAP端点作为URL.如果您使用的是WSDL,那么请将WSDL的路径作为URL. 将请求方法设置为POST. 打开原始编辑器,并将正文类型设置为“text / ...

  5. soap,socket

    Socket 接口是访问 Internet 使用得最广泛的方法. 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 20 ...

  6. SOAP、SOCKET协议

    一.SOAP( SOAP:Simple Object Access Protocol) 简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议,它被设计成在 WEB ...

  7. Rest(Restful)风格的Web API跟RPC风格的SOAP WebService--这些名词都啥意思?

    经常看到这些词汇,也有baidu或google过,但记忆里总是模糊,不确定,以至于别人问及的时候,总说不清楚.开篇随笔记录下.大家有补充或者意见的尽请留文. 本文顺序: 一.Rest(Restful) ...

  8. SOAP Web 服务介绍

    已经跨入 2015 年,当今最为常见的两种 Web 服务类型分别是: REST 和 SOAP .不过,从趋势来看,越来越多人已经开始使用 REST 风格的 Web 服务.而 SOAP 大多也开始或已经 ...

  9. WebService之SOAP

    SOAP(Simple Object Access Protocol),它是一种标准消息传递协议,通常是Web Service的事实标准.SOAP是以XML为基础,SOAP消息格式是由XML Sche ...

随机推荐

  1. 中石油-高精度阶乘-java

    问题 F: [高精度]高精度阶乘 时间限制: 1 Sec  内存限制: 64 MB提交: 49  解决: 13[提交][状态][讨论版] 题目描述 <魔法宝典>对于修罗王是如此重要,是因为 ...

  2. codeforces A. Strange Addition 解题报告

    题目链接:http://codeforces.com/problemset/problem/305/A 题目意思:给出一个序列,需要从中选择一些数,这些数需要满足:任意的两个数中每一位至少有一个数满足 ...

  3. cf158B(水题)

    题意:1辆出租车可以坐4人,已知k组人每组ki(ki<=4)人去坐车,要求同组人坐同一辆车,求最少需多少辆车.. 4人组的单独算,1人组和3人组一起,如1多余再将1和2匹配即可.... 代码如下 ...

  4. C#开发微信公众平台-就这么简单(附Demo)(转载)

    转载地址:http://www.cnblogs.com/xishuai/p/3625859.html 写在前面 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文.菜单事件 ...

  5. jquery easy ui 1.3.4 窗口,对话框,提示框(5)

    5.1.window(窗口) 窗口我们在程序中会大量的使用,比如我们的添加.编辑都可以使用窗口实现,与winform的程序非常的类似.下面的代码是创建一个基本的窗口 $(function () { $ ...

  6. vijos 1025 背包 *

    链接:点我 输入顺序又反了 #include<cstdio> #include<iostream> #include<algorithm> #include< ...

  7. active mq 配置延时

    修改activemq.xml 在<broker>里添加属性schedulerSupport="true" 参考:http://blog.csdn.net/kimmkin ...

  8. .NET Framework 4.6的新东西

    我们知道.NET Framework 4.6即将随着Visual Studio 2015一同到来,目前依然是预览版.4.6和4,4.5,4.5.1和4.5.2是兼容的,也即安装4.6后会升级替代他们. ...

  9. Android判断App是否在前台运行(转)

    原文地址: http://blog.csdn.net/zuolongsnail/article/details/8168689 Android开发中,有时候需要判断App是否在前台运行. 代码实现如下 ...

  10. android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解 (转)

    原文地址:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解 作者: 第一种情况:有MAIN,无LAUNCHER,程 ...