目前做IT网络这是不同的两层,也是在实际中经常使用的两层,我在下面做个实际的范例,因为在世界中经常有SOAP头等一系列的问题...


  开始创建.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传输的时候被通过验证。。。。


 好了,举例完毕,提供一下下载吧: