PHP使用.NET的WebService技术范例

目前做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传输的时候被通过验证。。。。

 好了,举例完毕,提供一下下载吧:
 
点击浏览该文件

  --
谢谢关注。

你可能感兴趣的:(webservice)