.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. [JavaScript]JS由来

    JavaScript最早由Netscape公司开发 JavaScript的发展历程 我们知道Windows桌面程序是可以交互的,用户可以点击菜单.按钮.下拉列表等控件,并通过消息机制来响应用户操作. ...

  2. HDFS snapshot操作实战

    Hadoop从2.1.0版开始提供了HDFS SnapShot的功能.一个snapshot(快照)是一个全部文件系统.或者某个目录在某一时刻的镜像.快照在下面场景下是非常有用:防止用户的错误操作:管理 ...

  3. Unity3D 第一人称控制器 C#脚本

    CharacterMotor.cs using UnityEngine; using System.Collections; /** * @Author : www.xuanyusong.com */ ...

  4. ipad2 恢复

    1.用原装充电线连接电脑,并打开itunes~2.同时按住电源键和home键 10秒左右,直到白苹果画面变成黑屏3.按住home键~但要松开电源键,继续等待~直到ipad出现画面(如图) 4.这时候, ...

  5. Struts2:效验器——声明式

    就是用xml配置的方式,而不是Java代码的形式,那个是“编程式” Action: package org.ah.s2; import com.opensymphony.xwork2.ActionSu ...

  6. copy elision

    http://book.51cto.com/art/200810/93007.htm 1.2.2  数据传送指令 mov:数据移动.第一个参数是目的,第二个参数是来源.在C语言中相当于赋值号.这是最广 ...

  7. oracle计算两行差值

    Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列. 这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率. SELECT c ...

  8. 一个最小mybatis

    项目结构 package hello; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis ...

  9. 在osx下通过vmware无GUI方式运行centos 7

    启动虚拟机: /Applications/VMware\ Fusion.app/Contents/Library/vmrun -T fusion start "CentOS 64-bit.v ...

  10. js错误:TypeError $(...) is null

    转载自:http://www.phpernote.com/jquery/851.html: