VFP MSSOAPTOOKIT 使用SOAP Headers
.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的更多相关文章
- (转)Java实现Web Service过程中处理SOAP Header的问题
网上有篇文章,大致这么说的(如下文),最后我采用的wsimport -XadditionalHeaders的方式. StrikeIron offers two authentication meth ...
- SOAP Only Authentication Using C#
Jason Lattimer's Blog Monday, February 9, 2015 SOAP Only Authentication ...
- hp soap扩展最全说明,附天气预报调用的例子
自从php5开始,我们可以不用通过php nusoap来创建php soap web service 和调用 soap了,php5内置了 soap扩展.只需要在php.ini中开启soap的exten ...
- 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 ...
- php5调用web service
工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经 ...
- suds调用webservice
一.安装 pip install suds 二.日志 import logging logging.basicConfig(level=logging.INFO) logging.getLogger( ...
- 集成架构:对比 Web API 与面向服务的架构和企业应用程序集成(转)
http://kb.cnblogs.com/page/521644/ 摘要:总体上讲,SOA 和 Web API 似乎解决的是同一个问题:以实时的.可重用的方式公开业务功能.本教程将分析这些举措有何不 ...
- [转]Web Service Authentication
本文转自:http://www.codeproject.com/Articles/9348/Web-Service-Authentication Download source files - 45. ...
- php5调用web service (笔者测试成功)
转自:http://www.cnblogs.com/smallmuda/archive/2010/10/12/1848700.html 感谢作者分享 工作中需要用php调用web service接口, ...
随机推荐
- Windows Driver Frameworks
MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff557565(v=vs.85).aspx
- [FFmpeg] ffmpeg 常用命令
1. 视频转换 比如一个avi文件,想转为mp4,或者一个mp4想转为ts. ffmpeg -i input.avi output.mp4 ffmpeg -i input.mp4 output.ts ...
- 如何自定义Flask中的响应类
http://codingpy.com/article/customizing-the-flask-response-class/
- 坦克大战,看你能坚持几秒 ~~Duang~~Duang
闲来无事,写了一个坦克大战的小游戏,打开页面就能看到源码,代码还没有来得及整理.大家闲来玩玩吧,看谁玩的时间长! http://xiaohaibaomu.com/home/index
- AE开发示例之RunGPAsync
using System; using System.Collections.Generic;using System.ComponentModel;using System.Data;using S ...
- 剑指Offer:解决难题时的三大方法
1.画图 让抽象的东西变得直观生动起来.比如设计二叉树,链表,栈,队列这些数据结构时. 2.举例子 同样可以化抽象为直观.能够更清晰的展现思路.从例子归纳出一般做法. 3.分解 有时问题本身是比较复杂 ...
- Have Fun with Numbers及循环链表(约瑟夫问题)
1. 循环链表(约瑟夫问题) https://github.com/BodhiXing/Data_Structure 2. Have Fun with Numbers https://pta.pate ...
- [转]解决a different object with the same identifier value was already associated with the session错误
1.a different object with the same identifier value was already associated with the session. 错误原因:在h ...
- MySQL的数值类型,时间
数值类型 整数型 tinyint smallint mediumint int|integer bigint 注意: 1, 如何选择数据类型,我们的原则是:够用就行!尽量的选择占用内存小的整型 ...
- oracle批量修改多个表的数据
方法一 写PL/SQL,开cursor declare l_varID varchar2(20); l_varSubName varchar2(30); cursor mycur is sele ...