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

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

      --
    谢谢关注。

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    C#正则表达式
    HDU 1009 FatMouse' Trade
    HDU 1022 Train Problem I
    HDU 3665 Seaside
    (转)qsort完整版用法
    HDU 1061 Rightmost Digit (矩阵快速幂)
    HDU 2817 A sequence of numbers
    HDU 1943 Ball bearings
    HDU 1058 Humble Numbers
    HDU 4278 Faulty Odometer
  • 原文地址:https://www.cnblogs.com/Athrun/p/1157172.html
Copyright © 2020-2023  润新知