开始创建.NET的WebService类:
namespace Cjjer.Webs{
using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web;
using Cjjer;
public class ActorHeader:SoapHeader{//这是一个SOAP头
public string OASID;
};
[WebService (Name="TestWebServices",Description="测试WebServices",Namespace="http://www.5do8.com/webs/")]
public class Actor:System.Web.Services.WebService{
public ActorHeader AuthHeader ;
[WebMethod (EnableSession=true,Description ="GetGUIDNode",MessageName="GetGUIDNode")]
[SoapHeader ("AuthHeader")]
[SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Wrapped)]
public string GetGUIDNode(string GUID){
if(!String.IsNullOrEmpty(GUID))GUID=GUID.Trim();
int statusCode = 200;
if(!IsValidHeader(AuthHeader)){
statusCode = 501;
}
return statusCode.ToString() + "-" + GUID;
}
private bool IsValidHeader(ActorHeader aH){
if(aH==null)return false;
if(aH.OASID!="Cjjer") return false;
return true;
}
};
}
类创建完毕,创建一个asmx文件绑定该类:
<%@WebService Class="Cjjer.Webs.Actor"%>
然后使用PHP读取,这里加了一个Header,这在非明文传输中,是很有价值的,例如SOAP访问传输中,使用通行证等。。。
我下面写的是利用PHP5+以上自带支持SOAP扩展的环境写的:
@define('SoapBaseUrl',"http://s:505/");
@define('SoapBaseNameSpace',"http://www.5do8.com/webs/");
$GUID = time();
$client = new SoapClient(SoapBaseUrl."test.asmx?wsdl");
$parameters=array('GUID'=>$GUID);
$auth =array('OASID'=>'Cjjer');
$authvalues = new SoapVar($auth, SOAP_ENC_OBJECT,'ActorHeader',SoapBaseNameSpace);
$header = new SoapHeader(SoapBaseNameSpace,"ActorHeader", $authvalues, true);
$client->__setSoapHeaders(array($header));
$result=$client->GetGUIDNode( $parameters);
var_dump($result);
访问该PHP文件,如果出现;
object(stdClass)#4 (1) { ["GetGUIDNodeResult"]=> string(14) "200-1205411735" }
200-后面的是目前的time(),200表示通过。如果我们把$auth =array('OASID'=>'Cjjer');这句改成$auth =array('OASID'=>'Cjjer-hi');将出现object(stdClass)#4 (1) { ["GetGUIDNodeResult"]=> string(14) "501-1205411804" },是501...表示soap传输的时候被通过验证。。。。
好了,举例完毕,提供一下下载吧:
点击浏览该文件
--
谢谢关注。