.NET 有如下使用了自定义扩展HEADER来做验证  server.asmx代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using QiyuSoft.BLL;
using System.Web.Services.Protocols;

namespace DynamicIPService
{
/// <summary>
/// Service1 的摘要说明
/// </summary>
[WebService(Namespace = "http://www.tab163.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class DynamicIPService : System.Web.Services.WebService
{
public SOAPAuthHeader sHeader=new SOAPAuthHeader();
[SoapHeader("sHeader")]
[WebMethod]
public string HelloWorld()
{
//return sHeader.EncodedMustUnderstand12.ToString();
if (sHeader == null)
{
return "没有登录";
}
else
{
if (sHeader.UserName == "123")
return "Hello World";
else
return "用户名:"+sHeader.UserName + "没有登录";
}
}

}
}

自定义扩展Header类

public class SOAPAuthHeader : SoapHeader
{
public string UserName;
public string UserPwd;
}

VFP 要调用HelloWorld 要必须实现自定义SOAP Header头 

如下调用方法

sc1 =CreateObject("MSSOAP.SoapClient")
sc1.mssoapinit ("http://localhost:8080/DynamicIPService.asmx?wsdl","DynamicIPService","DynamicIPServiceSoap")
sc1.HeaderHandler = 自定义头com组件
?sc1.helloworld()

查阅文档,要实现自定义头,要就实现IHeaderHandler接口

新建VFP项目 

*-- 定义了USER_ELEMENT_1-3个元素,及 USER_ELEMENT_1_VALUE 值
Define Class MyData As Session OlePublic
Implements IHeaderHandler IN MSSOAP.ConnectorFactory30
HEADER_ELEMENT_NAMESPACE = "http://tempuri.org/"
HEADER_ELEMENT_NAME = "SOAPAuthHeader"
USER_ELEMENT_1 = ""
USER_ELEMENT_2 =""
USER_ELEMENT_3 =""
USER_ELEMENT_1_VALUE =""
USER_ELEMENT_2_VALUE =""
USER_ELEMENT_3_VALUE =""
Function IHeaderHandler_readHeader(pReader As SoapReader30, pHeaderNode As MSXML2.IXMLDOMNode, pObject As Object)
If pHeaderNode.baseName <> HEADER_ELEMENT_NAME Or pHeaderNode.namespaceURI <> HEADER_ELEMENT_NAMESPACE
IHeaderHandler_readHeader = .F.
RETURN
Endif
*this.UserName= pHeaderNode.selectSingleNode("UserName").Text
IHeaderHandler_readHeader = .T.
Endfunc

Function IHeaderHandler_willWriteHeaders()
IHeaderHandler_willWriteHeaders = .T.
Endfunc

Function IHeaderHandler_writeHeaders(pSerializer As MSSOAPLib30.ISoapSerializer,pObject As Object)
pSerializer.startHeaderElement(this.HEADER_ELEMENT_NAME,this.HEADER_ELEMENT_NAMESPACE)
IF !EMPTY(this.USER_ELEMENT_1)
pSerializer.StartElement(this.USER_ELEMENT_1,this.HEADER_ELEMENT_NAMESPACE)
pSerializer.writestring(this.USER_ELEMENT_1_VALUE)
pSerializer.endelement()
ENDIF

IF !EMPTY(this.USER_ELEMENT_2)
pSerializer.StartElement(this.USER_ELEMENT_2,this.HEADER_ELEMENT_NAMESPACE)
pSerializer.writestring(this.USER_ELEMENT_2_VALUE)
pSerializer.endelement()
ENDIF

IF !EMPTY(this.USER_ELEMENT_2)
pSerializer.StartElement(this.USER_ELEMENT_2,this.HEADER_ELEMENT_NAMESPACE)
pSerializer.writestring(this.USER_ELEMENT_2_VALUE)
pSerializer.endelement()
ENDIF

pSerializer.EndHeaderElement()
Endfunc
Enddefine

将项目编译成dll,然后在程序中调用

sc1 =CreateObject("MSSOAP.SoapClient")
sc1.mssoapinit ("http://localhost:8080/DynamicIPService.asmx?wsdl","DynamicIPService","DynamicIPServiceSoap")
sh1=CREATEOBJECT("soapheader.mydata")
sh1.HEADER_ELEMENT_NAMESPACE ="http://www.tab163.com/"  &&这个很重要,我调试了很久,名称空间不能写错了
sh1.USER_ELEMENT_1 ="UserName"
sh1.USER_ELEMENT_1_Value ="123"
sc1.HeaderHandler = sh1
?sc1.helloworld()

返回helloworld,至此成功.

VFP MSSOAPTOOKIT 使用SOAP Headers的更多相关文章

  1. (转)Java实现Web Service过程中处理SOAP Header的问题

    网上有篇文章,大致这么说的(如下文),最后我采用的wsimport  -XadditionalHeaders的方式. StrikeIron offers two authentication meth ...

  2. SOAP Only Authentication Using C#

                Jason Lattimer's Blog                 Monday, February 9, 2015 SOAP Only Authentication ...

  3. hp soap扩展最全说明,附天气预报调用的例子

    自从php5开始,我们可以不用通过php nusoap来创建php soap web service 和调用 soap了,php5内置了 soap扩展.只需要在php.ini中开启soap的exten ...

  4. A little bit about Handlers in JAX-WS

    by Rama Pulavarthi Handlers are message interceptors that can be easily plugged in to the JAX-WS run ...

  5. php5调用web service

    工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经 ...

  6. suds调用webservice

    一.安装 pip install suds 二.日志 import logging logging.basicConfig(level=logging.INFO) logging.getLogger( ...

  7. 集成架构:对比 Web API 与面向服务的架构和企业应用程序集成(转)

    http://kb.cnblogs.com/page/521644/ 摘要:总体上讲,SOA 和 Web API 似乎解决的是同一个问题:以实时的.可重用的方式公开业务功能.本教程将分析这些举措有何不 ...

  8. [转]Web Service Authentication

    本文转自:http://www.codeproject.com/Articles/9348/Web-Service-Authentication Download source files - 45. ...

  9. php5调用web service (笔者测试成功)

    转自:http://www.cnblogs.com/smallmuda/archive/2010/10/12/1848700.html 感谢作者分享 工作中需要用php调用web service接口, ...

随机推荐

  1. iPad开发

    获得view: self.categoryItem.customView 设置控制起 : 在POP ver中的尺寸 self.preferredContentSize = 坚挺三部曲 1. 通过设置 ...

  2. Spark读取Hbase的数据

    val conf = HBaseConfiguration.create() conf.addResource(new Path("/opt/cloudera/parcels/CDH-5.4 ...

  3. Java 技术文章摘录

    sokcet 编程实例 android bundle类 Android -- Looper.prepare()和Looper.loop() —深入版 Java NIO系列教程 XML操作 Androi ...

  4. HBase最佳实践-列族设计优化

    本文转自hbase.收藏学习下. 随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳 ...

  5. .NET 中关于 TypeCode 和枚举类型的问题

    因为C#中没有提供 Switch on Type 的功能,因此要判断类型通常会用一长串的if else,当然这种写法的问题是不够高效,且不够美观.因此 C# 中对常见类型提供了一组枚举值,也就是 Ty ...

  6. java中final 、finally、finalize的区别

    比较java中常用关键字以免混淆 final :用来修饰变量,表示变量为最终变量,不能被改变 finally:在处理异常的时候使用,表示最终要执行的代码块 finalize:java Object类中 ...

  7. 前端模板之EasyUI常用控件及参数

    CSS类定义 div easyui-window window窗口样式 属性如下: 1) modal:是否生成模态窗口.true[是] false[否] 2) shadow:是否显示窗口阴影.true ...

  8. session保存用户信息

    前台jsp-------------- <%@ page import="com.manager.form.User" %><%User user = reque ...

  9. (转)ArcGIS制图技巧

    ArcGIS制图技巧(转载自新浪博客)   1  引言 1.1  制图的目的 随着GIS在各行各业的深入应用,各信息化部门和生产单位都逐渐建立起自己的GIS的应用,同时积累了大量的地理数据.随着应用深 ...

  10. JVM 内存的那些事

    转自:http://blog.jobbole.com/104863/ 对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出 ...