灵活定义和处理SOAP头消息

     XML 文档中编码的数据是该格式的一部分。XML 文档由根 Envelope 标记组成,而该标记又由必需的 Body 元素和可选的 Header 元素组成。Body 元素由特定于消息的数据组成。可选的 Header 元素可以包含不与特定消息直接相关的附加消息。Header 元素的每个子元素都叫做 SOAP 标头。

虽然 SOAP 标头可以包含与该消息相关的数据(因为 SOAP 规范没有严格地定义 SOAP 标头的内容),但是它们通常包含 Web 服务器中基础结构处理的信息。

使用 ASP.NET 创建的 XML Web services 可以定义和操作 SOAP 标头。定义 SOAP 标头是通过定义表示特定 SOAP 标头中数据的类以及从 类中派生该类完成的。

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

public class MyHeader : SoapHeader

添加公共字段或属性,与 SOAP 标头中每个元素的名称和它们各自的数据类型匹配。
例如,在给定以下 SOAP 标头的情况下,其后的类定义一个表示 SOAP 标头的类。

<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <MyHeader xmlns="http://www.contoso.com">
    <Username>MyUsername</Username>
    <Password>MyPassword</Password>
  </MyHeader>
</soap:Header>


public class MyHeader : SoapHeader
{
   public string Username;
   public string Password;
}

在 XML Web services 中处理 SOAP 标头

将公共成员添加到实现表示 SOAP 标头类型的 XML Web services 的类。
[WebService(Namespace="http://www.contoso.com")]
public class MyWebService
{
    // Add a member variable of the type deriving from SoapHeader.
    public MyHeader myHeaderMemberVariable;

将 SoapHeader 属性应用于要处理 SOAP 标头的每个 XML Web services 方法。将 SoapHeader 特性的 MemberName 属性设置为第一步中创建的成员变量的名称。 
    [WebMethod]
    [SoapHeader("myHeaderMemberVariable")]
    public void MyWebMethod()

在应用 SoapHeader 特性的每个 XML Web services 方法中,访问在第一步中创建的成员变量以处理在 SOAP 标头中发送的数据。 
    [WebMethod]
    [SoapHeader("myHeaderMemberVariable")]
    public void MyWebMethod()
    {
        // Process the SoapHeader.
        if (myHeaderMemberVariable.Username == "admin")
        {
           // Do something interesting.
        }
    }

实例:

MyWebService XML Web services 具有一个名为 myHeaderMemberVariable 的成员变量,该成员变量属于从 SoapHeader (MyHeader) 派生的类型并设置为 SoapHeader 特性的 MemberName 属性。另外,将 SoapHeader 特性应用于指定 myHeaderMemberVariable 成员变量的 MyWebMethod XML Web services 方法。在 MyWebMethod XML Web services 方法中,访问 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 base class.
public class MyHeader : SoapHeader
{
    public string Username;
    public string Password;
}

[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.
        }
    }
}

生成处理 SOAP 标头的客户端
当与 XML Web services 进行通讯时,XML Web services 客户端可以发送和接收 SOAP 标头。当使用 Wsdl.exe 实用工具为预期或返回 SOAP 标头的 XML Web services 生成代理类时,该代理类包括有关 SOAP 标头的信息。明确地说,代理类具有表示 SOAP 标头的成员变量,这些 SOAP 标头与 XML Web services 中的 SOAP 标头互相关联。代理类也具有表示 SOAP 标头的相应的类的定义。例如,为上面的 XML Web services 生成的代理类将具有一个 MyHeader 类型的成员变量以及 MyHeader 类的定义。

创建表示 SOAP 标头的类的新实例。

MyHeader mySoapHeader = new MyHeader();

为该 SOAP 标头填充值。

mySoapHeader.Username = "username";
mySoapHeader.Password = "password";

创建该代理类的新实例。

MyWebService proxy = new MyWebService();

将该 SOAP 标头对象分配到表示 SOAP 标头的代理类的成员变量。

proxy.MyHeaderValue = mySoapHeader
对与 XML Web services 方法通讯的代理类调用方法。
发送到 XML Web services 的 SOAP 请求的 SOAP 标头部分将包括存储在 SOAP 标头对象中数据的内容。

string results = proxy.MyWebMethod();

下面演示如何将 SOAP 标头从客户端传递到 XML Web services。

<%@ Page Language="C#" %>

<asp:Label id="ReturnValue" runat="server" />
<script runat=server language=c#>

 void Page_Load(Object o,EventArgs e)
 {

  MyHeader mySoapHeader = new MyHeader();

  // Populate the values of the SOAP header.
  mySoapHeader.Username = "username";
  mySoapHeader.Password = "password";

  // Create a new instance of the proxy class.
  MyWebService proxy = new MyWebService();
 
  // Add the MyHeader SOAP header to the SOAP request.
  proxy.MyHeaderValue = mySoapHeader;

  // Call the method on the proxy class that communicates with
  // your XML Web service method.
  string results = proxy.MyWebMethod();

  // Display the results of the method in a label.  ReturnValue.Text = results; }</script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1.使用ajax调用varxhr;functioninvoke(){if(window.ActiveXObject){xhr=newActiveXObject("Microsoft.XMLHTTP");}else{xhr=newXMLHttpRequest();}//指定请求地址varurl="http://127.0.0.1:7777/hello?wsdl";//
               好不容易把WebService服务器端搭建起来,我们还需要客户端程序也同样跑起来才能够进行和服务器端程序的通信: 在这篇文章里面,我会先自己写代码去实现调用WebService服务器端程序,接下来,通过IDEA配置的方式来调用WebService服务端: 首先,我写了一个W
1新建一个工程项目用来做服务端增加一个MyService1类文件packagecom.zns.ws;importjavax.jws.WebMethod;importjavax.jws.WebService;importjavax.xml.ws.Endpoint;@WebServicepublicclassMyService1{publicstaticvoidmain(String[]args){
packagecom.transsion.util;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importcom.alibaba.druid.util.Base64;importcom.tra
再生产wsdl文件时重写描述文件1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Web;5usingSystem.Web.Services.Description;67namespaceStrongSoftManage.Web.App8{9publicclassSoapExtens:SoapExtensi
一般情况下,使用eclipse自带的jax-ws生成webservice会自动生成2个类:ContractConnector.java packagecom.wonders.webservice.contract;importjava.text.DecimalFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;i
一、WebService概述1.1什么是WebService 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 一个跨语言、跨平台的规范(抽象)所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务
一、什么是CXF?    ApacheCXF=Celtix+Xfire,开始叫ApacheCeltiXfire,后来更名为ApacheCXF了,以下简称为CXF。ApacheCXF是一个开源的webServices框架,CXF帮助您构建和开发webServices,它支持多种协议,比如:SOAP1.1,1,2 XML/HTTP、RESTful或者CORBA。  
工具IDEA一、构建项目1、选择SpringInitializr2、填写项目信息3、勾选webService4、勾选Thymeleaf5、项目建立完成,启动类自动生成二、写个Controller启动服务。浏览器访问/hello接口。 
1.环境win764位,vs20102.新建一个asp.netweb应用程序(同上一篇)3.添加一个web引用,引用上一篇创建的服务。注意不是服务引用。如下图 
WebService之WSDL文件讲解   恩,我想说的是,是不是经常有人在开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户给你一个WSDL文件,说按照上面的进行适配,嘿嘿,这个时候,要是你以前没有开发过,肯定会傻眼,那如果你想学习的话,就认真的看下面的讲解咯:一、WSDL概述  
在websrvice发布文件的webconfig中加入<httpRuntimemaxRequestLength="102400"/> <webServices>     <protocols>       <addname="HttpPost"/>       <addname="HttpGet"/>     </protocols>   
 代码比较简单,按照如下来操作即可,只是jar包有很多问题,比如找不到classnotFondspring、以及找不到xfile.xml、以及xfile.xml中的一个参数问题,以及2.0 spring。jar和spring1.6.2冲突问题,总之这个小demo报了一堆错误,其实都是jar的问题,为了让大家减少这方面的错误,所以我提供
 一、soapUI简介SOAP:   WebService通过Http协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息头的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用WebService。 
参考,感谢https://blog.csdn.net/hj7jay/article/details/727224381.环境:win764位,jdk1.8.0_201 EclipseJavaEEIDEforWebDevelopers.Version:Mars.1Release(4.5.1)2.创建一个普通的java项目,名字是TheService在src目录下创建一个com.hyan.service包,在此包下创建
CXF实现RestfulWebService基础示例一、写在前面IDE:IDEA14JDK:1.7CXF:2.6.2示例来源:%CXF_HOME%\samples\jax_rs\basic发布方式:JAXRSServerFactoryBean的create()方法调用方式:URL的openStream()方法、HttpClient的executeMethod()方法二、服务端(Java项目)1.准备Jar包
封装helper类:classWebServiceHelper{///<summary>///1.get请求http方法///</summary>///<paramname="url">基础url</param>///<paramname="method">请求方法</param>///<paramnam
.net客户端调用java或.netwebservice进行soapheader验证最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader。借此机会,顺便整理一下调用.netwebservice和javawebservice的验证方式,记录下来。
Node.jshttps://www.cnblogs.com/goldlong/p/8027997.htmlQQ音乐apihttps://juejin.im/post/5a35228e51882506a463b172#heading-11?tdsourcetag=s_pcqq_aiomsgGit把本地仓库上传到GitHbubhttps://blog.csdn.net/zamamiro/article/details/70172900git删除本地仓库https://blog.cs
转载自:孤傲苍狼 WebService学习总结(三)——使用JDK开发WebService一、WebService的开发手段使用Java开发WebService时可以使用以下两种开发手段1、 使用JDK开发(1.6及以上版本)-->详见:本文2、使用CXF框架开发-->详见:其他文章二、使用JDK开发WebServi